Unix网络编程中的常用IO模型

Unix网络编程常用四种IO模型,包括阻塞IO、非阻塞IO、IO多路复用和异步IO。网络IO需进程发起请求,内核组织数据并复制到用户空间。阻塞IO中用户进程在数据准备阶段被阻塞;非阻塞IO若数据未准备好会立刻返回;IO多路复用可代理多请求;异步IO完成操作后通知进程。

Unix网络编程中常用的IO模型有四种,分别为

  • Blocking IO - 阻塞IO
  • NoneBlocking IO - 非阻塞IO
  • IO multiplexing - IO多路复用
  • asynchronous IO - 异步IO

网络IO,是application的进程发起一个请求,在kernel内核中组织好数据。当数据准备好后,kernel将数据从系统缓冲区复制到用户空间,application才能继续处理。

Blocking IO - 阻塞IO

在linux中,默认情况下所有的socket都是blocking。
kernel在准备数据的阶段,用户进程被阻塞。等kernel返回结果,用户进程才解除block的状态,重新运行。

NoneBlockingIO - 非阻塞IO

当用户进程发出系统调用后,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个结果(no datagram ready)。用户进程得知数据还没有准备好后,它可以每隔一段时间再次发送请求。当kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到了用户内存,然后返回。

IO multiplexing - IO多路复用

多路复用可以等待多个数据就绪,相当于一个代理,可代理多个请求。用户进程请求代理之后,进程被代理阻塞,此时代理会监听kernel的状态,如果其中一个进程需要的数据就绪就返回。

asynchronous IO - 异步IO

用户进程发起的请求,会通知内核进行操作,并将数据拷贝至进程中。完成之后,再通知进程整个操作全部完成(绑定一个回调函数处理数据)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值