我坐下来读书Apache 的 MPM prefork.c http://code.metager.de/source/xref/apache/httpd/server/mpm/prefork/prefork.c这段代码使用了一个名为accept_mutex
防止多线程调用accept()
。这很奇怪,因为据我所知accept()是线程安全的 https://stackoverflow.com/questions/5124320/is-accept-thread-safe.
Accept() 线程安全吗?这是平台兼容性问题吗?如果是的话哪个平台实现了非线程安全accept()
?
这在Apache 性能调优文档 http://httpd.apache.org/docs/2.2/misc/perf-tuning.html, 在下面 ”accept()
序列化 - 多个套接字”。简而言之,至少在某些操作系统下,传入连接将被唤醒all正在等待传入连接的 Apache 进程select()
or poll()
,但会导致accept()
除了其中一个之外,其他所有项目都失败。这是低效的,因此使用互斥锁来确保一次只有一个进程接受传入连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)