Hello!
2015-06-19 15:29 GMT+08:00 Zheng Ping:
>
> 今天看了一下网上的一篇文章
> http://nginx.com/blog/thread-pools-boost-performance-9x/
> 说道把重阻塞型计算通过线程来完成,能很好的解除对nginx worker事件循环的干扰,
nginx 的这个 OS 线程池主要为了规避 disk I/O 的阻塞效应(毕竟不存在 nonblocking disk I/O
这种东西,而 AIO 又有很多问题)。nginx 的创始人 Igor Sysoev 在去年和我见面时也亲口这么说的。
这个东西的引入其实并不是为了 CPU 密集型的东西。对于 CPU 密集型的东西,更多的 OS 线程可以让请求之间更加公平,但同时因为 CPU
争用的开销,系统的整体吞吐量会下降。毕竟当前系统的 CPU 资源是一个常数,并不会因为你创建的 OS
线程越多就凭空增加出来,相反,只会因为线程本身的开销而浪费一些。
> 我想起以前我想用nginx
> workder来播放mp3,结果不能发声,应该是解码库和nginx worker不相融的缘故吧?
建议仔细追踪来确认问题,而最好不要猜测归因 :)
> 如果能把播放任务交由线程池来完成,这样nginx就起到了beanstalkd的作用,不知将来是否会考虑在ngx_lua中提供一个在线程池中创建task的API,这样openresty就扮演了work
> queue的角色,这样妈妈再也不用担心通过cosokect去连接的另一个队列服务器挂了的痛苦了。
OpenResty 会暴露出 nginx 线程池的 API,不过主要也是针对文件 I/O. 我一时可能不会有时间去搞,欢迎大家提 pull
request 或者赞助我开发哈,呵呵。
Regards,
-agentzh