mpm_event
与mpm_worker
类似,只是mpm_event
使用单独的专用线程管理所有(非SSL)KeepAlive连接,而不是让每个线程管理每个单独的连接。通过为每个KeepAlive连接提供然后保留专用线程,mpm_worker
将该线程及其资源绑定到该连接,而不管是否正在处理请求。另一方面,mpm_event
可以通过在请求完成后允许线程及其资源回收到系统来降低高并发环境中的系统资源使用。
在我看来,在高并发性,KeepAlive长时间超时的非SSL环境中,mpm_event
有可能使系统能够处理比具有相同资源的系统更高的工作负载。使用mpm_worker
进行身份验证。 更重要的是,在我看来,在资源使用和功能方面,mpm_event
在所有情况下都至少与mpm_worker
一样好,如果不是更好的话。
尽管我理解mpm_event
总是至少同样好,可能更好,但我最喜欢的Linux发行版在从存储库安装Apache 2.4时默认使用mpm_worker
。这让我想知道我的想法是否不完整以及是否有一些技术原因我在Apache 2.4中使用mpm_worker
而不是mpm_event
。
因此,我的问题是,我说mpm_worker
至少与mpm_event
一样好,如果不是更好,在任何情况下都是如此,以及(2)如果不是,那么技术效益是什么?是否在Apache 2.4中使用mpm_worker
答案 0 :(得分:1)
有两个优点"我能想到。两者都很模糊。
worker不需要在每个进程中争夺锁定来保护keepalive连接列表。这意味着存在退化的工作负载,这些工作负载可以在相对较低的总客户端数量下看到锁争用,从而无法从事件的可伸缩性中受益。
其次,一些非常模糊的第三方模块在事件中可能会有微妙的错误,例如异步写入完成意味着某些回调发生在"不同的"线。异步写入完成是当对客户端的写入将阻塞(客户端缓慢读取)时发生的事情,因此请求被暂停,并且当客户端套接字再次可写时将在新线程上恢复生效。