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
Netty-08-通讯模型框架 libevent
libevent
libevent – an event notification library
功能
libevent API提供了一种机制,用于在文件描述符上发生特定事件或达到超时后执行回调函数。
此外,libevent还支持由于信号或定期超时引起的回调。
libevent旨在替换事件驱动的网络服务器中的事件循环。应用程序只需调用event_dispatch(),然后动态添加...
2017-11-16 11:23:06 |
Netty
Netty-07-通讯模型之 NIO
NIO 编程
JDK 1.4中的java.nio.*包中引入新的Java I/O库,其目的是提高速度。
实际上,“旧”的I/O包已经使用NIO重新实现过,即使我们不显式的使用NIO编程,也能从中受益。
速度的提高在文件I/O和网络I/O中都可能会发生,但本文只讨论后者。
我个人比较倾向于 non-blocking 这种称呼。
简介
NIO我们一般认为是New I/O(也是官方的叫...
2017-11-16 11:23:06 |
Netty
Netty-07-通讯模型
Unix中的I/O模型
Unix定义了五种I/O模型
阻塞I/O
非阻塞I/O
I/O复用(select、poll、linux 2.6种改进的epoll)
信号驱动IO(SIGIO)
异步I/O(POSIX的aio_系列函数)
异步的处理
异步无非是通知系统做一件事情。然后忘掉它,自己做其他事情去了。很多时候系统做完某一件事情后需要一些后续的操作。怎么办?这时候就是告诉异步调...
2017-11-16 11:23:06 |
Netty
Netty-07-通讯模型之 BIO
传统的BIO编程
网络编程的基本模型是C/S模型,即两个进程间的通信。
服务端提供IP和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信。
传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信。
简...
2017-11-16 11:23:06 |
Netty
Netty-07-通讯模型之 AIO
java 中的 AIO
jdk7中新增了一些与文件(网络)I/O相关的一些api。这些API被称为NIO.2,或称为AIO(Asynchronous I/O)。
AIO最大的一个特性就是异步能力,这种能力对socket与文件I/O都起作用。
AIO其实是一种在读写操作结束之前允许进行其他操作的I/O处理。AIO是对JDK1.4中提出的同步非阻塞I/O(NIO)的进一步增强。
关于NI...
2017-11-16 11:23:06 |
Netty