- 博客(2)
- 收藏
- 关注
原创 select 、poll、epooll实现
1、select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select和poll在“醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间。这就是回调机制带来的性能提升。
2023-11-05 16:05:19
128
1
转载 网络io与io多路复用
在Linux的世界,一切皆是文件,所谓的文件就是一串二进制流,像Socket、FIFO、管道,都是数据流。在信息交换数据读写的过程中需要进行的操作,我们称为IO操作。IO有内存IO、网络IO和磁盘IO三种,一般我们说的IO指的是后两种。为什么需要IO模型如果使用同步的方式来通信的话,所有的操作都在一个线程内顺序执行完成,这么做缺点是很明显的:因为同步的通信操作会阻塞同一个线程的其他任何操作,只有这个操作完成了之后,后续的操作才可以完成,所以出现了同步阻塞+多线程。
2023-07-09 15:24:16
89
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人