面试爱问 | 网络编程

阻塞、非阻塞、同步、异步的区别?

阻塞/非阻塞 关注的点是 进程/线程 是否需要等待数据;阻塞代表需要等待数据,非阻塞代表不需要等待数据。

同步/异步 关注的点是 主动/被动 读取数据;同步代表需要主动读取数据,异步代表被动读取数据。

同步有阻塞和非阻塞之分,异步一定是非阻塞的。

举例说明: 假设老实人小王去书店买书,然而书店没有小王想买的书。。。。。。

  • 小王一直在书店等着,直到书店有书,这是 同步阻塞

  • 小王隔一段时间就去书店看看有没有书,这是 同步非阻塞

  • 老板在书店有书的时候给小王打电话,让小王过来拿书,这是 信号驱动IO同步非阻塞

  • 老板在书店有书的时候直接把书寄到小王家里,这是 异步非阻塞

此处的小王对应用户进程,书对应数据,买书对应系统调用,书店老板对应内核


IO的五种模型?

IO的五种模型:

  • 阻塞IO
  • 非阻塞IO
  • IO多路复用
  • 信号驱动IO
  • 异步IO

讲解五种IO模型的区别,仍然用上一个问题中小王去书店买书的例子说明。

  1. 阻塞IO

小王一直在书店等着,直到书店有书,这是 同步阻塞IO。

alt

  1. 非阻塞IO

小王隔一段时间就去书店看看有没有书,这是 同步非阻塞IO。

alt

  1. 多路复用IO

多路复用IO比较特别,在实际进行read/recv时并不会阻塞,但在select/poll/epoll时会阻塞。 小王来书店买书,但有一排书架,并不知道哪个书架上面有书,老板直接告诉小王哪个书架上面有书,这是多路复用IO。多路IO复用也属于同步非阻塞的一种。

alt

  1. 信号驱动IO

老板在书店有书的时候给小王打电话,让小王过来拿书,这是 信号驱动IO,也是同步非阻塞的一种。

alt

  1. 异步IO

老板在书店有书的时候直接把书寄到小王家里,这是 异步非阻塞。

alt

以上1~4都属于同步,5属于异步。


epoll/poll/select 的区别?

select,poll,epoll都属于 IO多路复用,在本质上都属于 同步非阻塞IO。 IO多路复用的 特点在于可以同时监听多个描述符,一旦有描述符就绪,就可以进行相应的读写操作。

  • select

select虽然可以同时监听多个描述符,但是select有三个比较大的缺点:

  1. 每一次调用select,都需要将fd集合从用户态拷贝到内核态,若fd数量很大,将会造成很大的开销;

  2. 每一次调用select,都需要在内核轮询遍历所有传递进来的fd集合,若fd数量很大,将会造成很大的开销;

  3. select最多只能同时监听1024个描述符,显然不够用。

  • poll

poll的内部实现原理和select类似,不过poll没有最大连接数的限制,因为它是基于链表存储的。

  • epoll

epoll在select和poll上面进行了改进,解决了上面的三个问题。

  1. 针对第一个缺点:epoll先通过epoll_create创建句柄,再使用epoll_ctl将fd集合拷贝进入内核,保证了fd集合只会拷贝一次

  2. 针对第二个缺点:epoll在epoll_ctl的时候将所有的fd集合拷贝进入内核之后,将其放入等待队列,并为每个fd设置一个回调函数,当有fd描述符就绪时,会调用回调函数,将其加入就绪队列链表epoll_wait 的工作实质上就是主动在就绪链表中查看是否有就绪的fd描述符。这样直接从轮询遍历fd集合的O(N)时间复杂度变为了直接读取就绪队列链表的O(1)时间复杂度。

  3. 针对第三个缺点:epoll没有监听描述符数量的上限,具体数目可以通过 cat /proc/sys/fs/file-max 命令查看

总结

  • select和poll在每一次调用时都需要将所有的fd集合拷贝进入内核态,并以轮询遍历该fd集合,这两点会造成很大的开销;并且能够同时监听的最大数量为1024。

  • epoll在epoll_craete时创建句柄;并在epoll_ctl时将文件描述符拷贝到内核态,再将其加入等待队列,设置相应的回调函数,当fd描述符就绪时,调用回调函数,将该描述符加入就绪链表;epoll_wait的作用就是主动在就绪链表中查看是否有就绪的fd描述符;epoll没有最大监听描述符的限制。


epoll中ET,LT的区别?

  • LT(Level Triggered)

LT水平触发是缺省的工作方式,只要缓冲区有数据就会,支持 和 。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

ARM/Linux嵌入式真题 文章被收录于专栏

让实战与真题助你offer满天飞!!! 每周更新!!! 励志做最全ARM/Linux嵌入式面试必考必会的题库。 励志讲清每一个知识点,找到每个问题最好的答案。 让你学懂,掌握,融会贯通。 因为技术知识工作中也会用到,所以踏实学习哦!!!

全部评论

相关推荐

点赞 8 评论
分享
牛客网
牛客企业服务