在总结socket编程时,如果不考虑到并发问题,服务器与客户端的交互逻辑应该是:
这种最简单的服务器逻辑,有一个名称:迭代服务器
特点:只与一个客户端进行通信,数据收发操作是有逻辑先后的。
多进程服务器:
多线程服务器:
综合考虑迭代服务器,多进程多线程服务器的缺点,问题的根源在于:
多路IO从根源上解决了上面的这些问题,其主旨思想是:
三种主要方法:
select,底层基于绑定了多个文件描述符的数组,采用轮询机制(O(n)的轮询复杂度),受限于单个进程可打开的最大文件描述符个数(FD_SETSIZE=1024)
pll,底层基于链表(无监听上限),其他与select基本一致
epoll,内核分别维护一颗红黑树和双向链表,红黑树保存注册的文件描述符,链表保存就绪事件,从内核将就绪链表拷贝到用户态,再对就绪链表进行遍历
epoll:
https://www.jianshu.com/p/beb6980cbb49
https://blog.csdn.net/zhaobryant/article/details/80557262
https://blog.csdn.net/shenya1314/article/details/73691088
原文:https://www.cnblogs.com/orejia/p/12132132.html