网络编程的模型与技术模型总结基本结论高效技术模型总结迭代方式并发方式–进程并发–线程并发–线程池/进程池–多核并发(绑定CPU核+流水线)IO模型–阻塞IO–非阻塞IO–IO复用–信号驱动IO–异步IO线程池/进程池缘起并发进程池/线程池技术–基本思想:准备一个池子,容纳预先创建的进程或线程,好处是省去了创建新进程或线程的时间–关键问题是如何把新连接分发给进程池中的一个进程
accept无上锁进程池中的所有空闲进程侦听服务端口,在accept()函数阻塞等待新连接建立,所有进程池中的进程被唤醒
系统调度进程池中的某个进程,从accept函数中返回,该进程为新进客户服务其余进程呢
依次被调度,但是由于listen队列中为空,再次被阻塞4
4BSD中的惊群效应(thunderingherd)accept的另一种方案使用IO复用模型——阻塞在select函数上–基本模型同accept–但是比accept方案更糟糕,原因是事件的发生新连接到达引发的,select更绕行一次accept上锁改进思路:让进程池中的进程依次访问accept函数,从而避免了为获得连接进程的调度开销,也就消除了惊群效应惊群效应的开销转嫁为锁的开销与锁的实现机制有关–文件锁–线程互斥锁进程池,分发连接描述符基本思想:–一个父进程负责侦听,子进程阻塞–当有新的连接,父进程把新socket传递给一个子进程与前述的accept方案相比,父子进程之间分工明确,避免了惊群效应子进程阻塞在进程间通信的管道上(不一定是PIPE)增加了进程间通信的开销,同时父进程必须跟踪子进程的状态,看它是否处于空闲描述符、空闲状态的传递线程池技术与进程池技术类似教材中省去了阻塞在accept函数的情况池技术与即时创建的对比并发的开销——调度+上下文切换+竞争与保护–相对于迭代方式,多出来的开