[Linux] 常见的并发模型

进程&线程(Apache) C10K问题

异步非阻塞(Nginx,Libevent,NodeJS) 开发时复杂度高

协程 (Golang Erlang lua) goroutine channel select通信

异步非阻塞:

inux使用epoll,windows是异步IO

解决C10K的关键在于多路复用,即一个进程/线程里多个请求。

IO多路复用三种机制:

select机制:一个进程循环监控多个文件句柄,但是文件句柄有上限,且每次都要重复初始化fd_set。

poll方式:select的加强版,基于链表存储,没了句柄数限制。

epoll方式:采用事件通知和回调激活的方式,处理发生变化的句柄,避免了无效的句柄轮循