Netty-08-数据传输之 Netty
模型
NIO模型
同步非阻塞
NIO有同步阻塞和同步非阻塞两种模式,一般讲的是同步非阻塞,服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
AIO模型
异步非阻塞
服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,注:AIO又称为N...
2017-11-16 11:23:06 |
Netty
Netty-08-linux 通讯模型之 Reactor
Reactor 模式是什么
白皮书
libevent 的设计是一个典型的Reactor模型,理解Reactor模型是理解libevent的基石,因此本节主要介绍典型的事件驱动设计模式—Reactor模式
The Reactor design pattern handles service requests that are delivered concurrently to an ap...
2017-11-16 11:23:06 |
Netty
Netty-08-linux 通讯模型之 epoll
文章会从网卡接收数据的流程讲起,串联起 CPU 中断、操作系统进程调度等知识;
再一步步分析阻塞接收数据、select 到 epoll 的进化过程;
最后探究 epoll 的实现细节。
一、从网卡接收数据说起
下边是一个典型的计算机结构图,计算机由 CPU、存储器(内存)与网络接口等部件组成,了解 epoll 本质的第一步,要从硬件的角度看计算机怎样接收网络数据。
下图展示了网...
2017-11-16 11:23:06 |
Netty
Netty-08-linux 通讯模型之 epoll
epoll
直到Linux2.6才出现了由内核直接支持的实现方法,那就是epoll,被公认为Linux2.6下性能最好的多路IO就绪通知方法。epoll可以同时支持水平触发和边缘触发(Edge Triggered,只告诉进程哪些文件描述符刚刚变为就绪状态,它只说一遍,如果我们没有采取行动,那么它将不会再次告知,这种方式称为边缘触发),理论上边缘触发的性能要更高一些,但是代码实现相当复杂。e...
2017-11-16 11:23:06 |
Netty
Netty-08-linux 通讯模型之 poll
Poll
poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态,如果设备就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有fd后没有发现就绪设备,则挂起当前进程,直到设备就绪或者主动超时,被唤醒后它又要再次遍历fd。
这个过程经历了多次无谓的遍历。
它没有最大连接数的限制,原因是它是基于链表来存储的,但是同样有一个缺点:
1、大...
2017-11-16 11:23:06 |
Netty
Netty-08-linux 通讯模型之 select
概览
epoll跟select都能提供多路I/O复用的解决方案。
在现在的Linux内核里有都能够支持,其中epoll是Linux所特有,而select则应该是POSIX所规定,一般操作系统均有实现。
select
select 与 poll 工作原理:
1、select 主要是采用轮询的方式来实现对就绪的 fd 处理:
2、poll 和 select 基本相同,主要不同在于 p...
2017-11-16 11:23:06 |
Netty
Netty-08-linux 通讯模型概览
IO模型
linux系统IO分为内核准备数据和将数据从内核拷贝到用户空间两个阶段。
从硬盘==》内核空间缓冲区==》用户空间缓冲区
基本概念
用户空间与内核空间
现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。
操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。
...
2017-11-16 11:23:06 |
Netty
Netty-08-通讯模型框架 libuv
libuv
libuv – Asynchronous I/O made simple.
libuv is a multi-platform support library with a focus on asynchronous.
参考资料
key word
linux libuv
doc
中文文档
en doc
other
基本使用
linux...
2017-11-16 11:23:06 |
Netty