Netty从入门到精通——I/O基础入门

第一章 I/O基础入门

Linux会将所有的外部设备看做一个文件操作,

对于文件的读写操作Linux会返回一个file descriptor(fd文件描述符),

对于一个socket的读写,相应的描述符成为socketfd(socket描述符)。

UNIX I/O模型分类:

①阻塞I/O模型

最常见的I/O模型,缺省情形下所有的文件操作(进程)都是阻塞的。在进行I/O操作后,用户进程会一直等待数据返回,若数据没有准备好就会一直阻塞。

②非阻塞I/O模型

进程在进行I/O请求时,不需要一直等待,会马上直接获得一个结果。结果是一个error,代表数据报还未准备好,但用户进程会不断询问这个状态直至内核数据到来,并将数据报拷贝到用户进程中。

③I/O复用模型

使用select/poll和recvfrom(从套接字接收消息)系统,进程会被阻塞在select操作上,通过select/poll操作来轮询多个fd是否处于就绪状态(支持的fd数量有限),有fd就绪后就调用函数rollback。

④信号驱动I/O模型

开启套接口信号驱动I/O功能后通过系统调用sigaction执行一个信号处理函数,当数据准备就绪后,就为该进程生成一个SIGIO信号,通过信号回调通知应用程序调用recvfrom读取数据。(内核通知何时开始

⑤异步I/O

在异步IO模型中,当用户线程发起read操作之后,立刻就可以开始去做其它的事。另一方面内核启动某个操作,让内核在操作完成后通知进程。(内核通知何时结束

I/O多路复用技术:

I/O:网络I/O

多路:多个TCP连接

复用:复用一个或一组线程。

I/O多路复用就是把多个I/O阻塞到同一个select上,复用一个(一组)线程同时处理多个客户端请求(TCP)连接。

I/O多路复用的优势就是节省了系统开销,不需要再创建新的进程或线程,节省了系统资源。

I/O多路复用的主要应用场景为:服务器需同时处理多个处于监听或连接状态的套接字;服务器需处理多种网络协议的套接字。

支持I/O多路复用的系统调用有selct、pseclect、poll、epoll,使用select轮询有一些缺陷,epoll就做了一些重大改进。

Epoll优点:

①支持一个进程打开的socket描述符(FD)不受限制(仅受限于操作系统的最大文件句柄数):elect最大的缺陷就是单个进程能打开的FD手受限的,epoll支持的FD上线是操作系统的最大文件句柄上限大地提高了网络效率。

②I/O效率不会随着FD数目的增加儿线性下降:统select/poll在只有少部分socket活跃的情况下也会线性扫描全部socket集合,会导致效率线性下降。Epoll则根据每个fd的callback函数实现只对活跃的socket进行操作,这样一来epoll的I/O效率大大提升。

③使用mmap加速内核与用户空间的消息传递:epoll通过内核和用户空间mmap同一块内存,避免了不必要的内存复制。

④epoll的API更加简单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值