nginx异步非阻塞理解
2017-04-19 本文已影响748人
eesly_yuan
好多文章都说nginx是异步非阻塞,这里针对这个概念记录一下自己的理解
异步
异步通常是指调用之后,直接返回,如果有结果后通过消息通知,或者调用注册的回调函数进行处理,其核心在于有结果后通过其他执行流程进行通知和处理,不影响现有的执行流程执行。
而nginx通过超时的epoll方式进行监听连接和或者监听接收多个socket的数据,这里虽然存在超时等待,当还是说它是异步,实际上更确切说是epoll内部的异步机制,即epoll是对不同的socket通过注册感兴趣的事件,内部不是轮询等待这些socket,而是通过在事件发生后收到通知方式对事件进行处理,这里进行超时等待实际上是为了留有时间让事件发生,回收通知。详细过程可参考【Linux学习】epoll详解
总结:nginx的异步是指epoll的异步机制,即内部探测socket事件发生是通过消息通知方式
非阻塞
非阻塞通常是指调用指定调用后,若不满足当前需求直接返回,若满足需求则处理,处理之后返回,因此这种方式实际是需要轮询访问直至成功。
nginx是采用一个进程单线程方式进行多个socket数据处理和建立连接,因此在每个socket进行接收数据或者建立链接的socket时必须采用非阻塞的模式,这样才不会导致一个socket阻塞后,导致其他的socket饿死的情况。
总结:nginx的非阻塞是指nginx对于建立链接的socket和每个建立的连接是采用非阻塞的模式进行数据处理的
以上是我对nginx异步非阻塞的理解,如若有误欢迎大家补充指正。