《Unix网络编程》笔记(I/O模型)

12 篇文章 0 订阅

Unix

模型

  1. 阻塞式I/O
    默认情况的socket,最简单常用的方式,
  2. 非阻塞式I/O
  3. I/O复用(select和poll)
  4. 信号驱动式I/O(SIGIO)
  5. 异步I/O(POSIX的aio_系列函数)

解释

I/O复用
这里写图片描述
进程阻塞在select系统调用上,直到数据可读,系统调用recvfrom
I/O复用的意义在于(查阅资料后的个人理解):当多个众多客户连接,如果使用阻塞模型。则需要为每个客户开辟一个线程,否则就会引起阻塞,而维护大量线程,这些线程中许多又是非忙碌状态的,那么线程本身内存开销和切换对效率影响是极大。这时候引入非阻塞,而普通非阻塞模型需要不断读取写入,无效操作占比高。因此Linux下的select、poll和epoll就是(下面是select的流程)规避这些大量的无用操作的

以下转自:https://www.zhihu.com/question/28594409/answer/52763082

以select和tcp socket为例,所谓可读事件,具体的说是指以下事件: 1、
1socket内核接收缓冲区中的可用字节数大于或等于其低水位SO_RCVLOWAT;
2socket通信的对方关闭了连接,这个时候在缓冲区里有个文件结束符EOF,此时读操作将返回0;
3监听socket的backlog队列有已经完成三次握手的连接请求,可以调用accept;
4socket上有未处理的错误,此时可以用getsockopt来读取和清除该错误

所谓可写事件,则是指:
1 socket的内核发送缓冲区的可用字节数大于或等于其低水位SO_SNDLOWAIT;
2socket的写端被关闭,继续写会收到SIGPIPE信号;
3 非阻塞模式下,connect返回之后,发起连接成功或失败;
4 socket上有未处理的错误,此时可以用getsockopt来读取和清除该错误

winsock

1 阻塞模型
2 select模型
3 WSAAsyncSelect模型 异步I/O模型
4 WSAEventSelect 异步事件通知I/O模型
5 重叠模型
6 完成端口模型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值