nginx不是使用epoll么? epoll貌似是同步的吧! 那nginx的异步非阻塞到底异步在哪里?

网络小白
  • 270

nginx不是使用epoll么? epoll貌似是同步的吧! 那nginx所谓的异步非阻塞到底异步在哪里? 为什么使用了epoll却叫异步?

还有就是unix上说 select/poll/epoll 管理的socket一般设置成非阻塞, 我觉着这里射不设置为非阻塞好像没有什么关系吧, 毕竟select/poll/epoll本身都会阻塞用户进程的嘛! 如果设置为非阻塞socket的话, select/poll需要轮询, 但是我设置为阻塞socket的话,select直接阻塞不就行了; 反正两种情况都会造成调用select的用户进程阻塞啊

回复
阅读 4.8k
2 个回答
  1. epoll确实是阻塞的.

  2. nginx的异步并不是指epoll的wait是异步的,而是指对于每个socketfd来说,它的handle是异步的.

其实,nginx是在epoll的地方同步监听socketfd的"改变",如果检测到一个sokcetfd“改变”,那么就调用对应的socketfd异步handle.

因此,epoll是阻塞的,nginx是异步非阻塞的.两者所指的Point不同.

epoll怎么是同步的了?epool是新的事件通知机制,旨在与取代select()和poll()。详情建议看维基百科。事件通知这玩意就是异步的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏