[Nginx] 事件模型

Nginx事件模型

异步非阻塞

Nginx采取异步非阻塞的方式处理请求。

处理请求流程:收到请求,建立连接,接收数据,发送数据。

如果采用阻塞调用,会陷入内核等待,在单进程的nginx下这样cpu就会空闲,没法充分使用。

采用非阻塞调用,会在事件没有准备好时,返回EAGAIN来通知,此时线程还可以做其他事情,然后再回来查看事件是否准备完成。这种情况下的消耗也比较大。

异步非阻塞调用是一种机制,可以同时监控多个事件,调用他们是阻塞的,但是可以设置超时时间,在超时时间内,如果有事件处理好了,就返回。以epoll为例,当事件没有准备好时,放到epoll中,事件准备好了,就去处理它,只有当所有的事件都没准备好时,才会在epoll里面等待。这样就可以处理大量未完成的并发事件。

线程只有一个,所以同时能处理的请求只有一个,只是在请求间不断地切换而已,切换也是因为事件未准备好而主动让出,没有任何代价。

猜你喜欢

转载自www.cnblogs.com/immjc/p/9156453.html
今日推荐