Nginx

IO事件模型

阻塞型、非阻塞型、复用型、信号驱动型、异步

同步:阻塞型、非阻塞型、复用型 异步:信号驱动型、异步

同步/异步

关注消息的通知机制

消息通知

  • 同步:等待对方返回消息

  • 异步:被调用者通过状态,通知或回调机制通知调用者被调用者的运行状态

阻塞/非阻塞

关注调用者在等待结果返回之前所处的状态

  • 阻塞:blocking 等待对方返回消息 睡眠,挂起,不可中断, 直到被调用方执行完成通知

  • 非阻塞:noblocking 调用者返回结果之前,调用者不会挂起。忙等,不睡眠,不阻塞,要不停的询问执行结果

一次文件的IO请求,都会有两阶段组成: 1. 等待数据,即数据从磁盘到内核内存 2. 复制数据,即数据内核内存到进程内存

信号驱动型:阻塞在第二步

复用型IO调用 select() 最大1024 poll()

event-driven:

  • epoll(linux): libevent

  • kqueue(BSD)

  • /dev/poll (Solaris)

用途

  • http server

  • reverse proxy 7层

  • map/pop3

Last updated

Was this helpful?