为了账号安全,请及时绑定邮箱和手机立即绑定

nginx是同步的网络IO还是异步的网络IO

nginx是同步的网络IO还是异步的网络IO

PHP
幕布斯7119047 2019-03-09 11:42:19
如题,我所知道的是nginx是多进程的。主进程(父进程)通过epoll向内核注册IO事件,当IO事件发生的时候内核会发送信号给父进程,这是父进程通知一个子进程去内核的缓冲区拿数据进行处理。也就是说nginx使用的是“IO多路复用”,IO多路复用意味着用户进程需要自己使用一个线程将数据从内核缓冲区复制到用户缓冲区,是同步的。 我不知道我上面理解的对不对,但是我看网上的很多资料是说nginx使用的是异步IO模型,我所理解的异步IO是:当数据到达内核缓冲区后,内核负责吧数据从内和缓冲区复制到用户缓冲区。 所以nginx的网络模型到底是什么样的?还请大神指点啊!## 标题文字 ##
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

我理解nginx的网络IO在单个具体处理进程中是同步的。因为它在处理时是网络阻塞的。

查看完整回答
反对 回复 2019-03-18
?
绝地无双

TA贡献1946条经验 获得超4个赞

POSIX 定义:An asynchronous I/O operation does not cause the requesting process to be blocked;
A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes;

epoll 在内核返回就绪事件时需要用户线程自己进行读写,这个过程是阻塞的,所以是同步的而非异步。

查看完整回答
反对 回复 2019-03-18
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

nginx在linux一般是用epoll, 它使用的是注册回调函数,数据准备好自动调用。这个过程其实阻塞的。master分配某个连接给worker进程,worker同一时间的阻塞的,只能处理一个请求。。还有nginx是多进程模型的

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 809 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信