Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20623
  • 博文数量: 7
  • 博客积分: 547
  • 博客等级: 中士
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-14 11:45
文章分类
文章存档

2012年(7)

我的朋友
最近访客

分类: WINDOWS

2012-05-16 15:13:45

nginx 的高性能依赖于 Linux 2.6 内核的 epoll 或是 BSD 内核的 kqueue 提供高效的网络套接字状态轮询服务【时间复杂度为 O】。在没有这两个服务的内核上则退化成为性能低下的 select 【*nix, Windows 都有、时间复杂度为 O(n) 】. Windows 没有 epoll 和 kqueue,nginx 在 Windows 上用 select 表现自然不佳。

Windows 上类似 epoll/kqueue 的服务是 I/O Completion Ports【Solaris 上也有】,理论上讲是比 epoll 更加先进的服务,因为它同时支持套接字、文件、管道【kqueue 类似】,而 epoll 不支持文件。也就是说不能用 epoll 做本地文件的异步 I/O。但不幸的是没有成熟的开源网络服务器使用 I/O Completion Ports。

Apache 的性能不好一概而论。它有好多种模式,主要的两种是:1、prefork 使用的是多进程;2、 worker 使用得是多进程+多线程。Windows NT 平台上线程的效率比较高【进程的效率则相对 *nix 下低】,所以使用多线程模式性能更优。Apache 还有个专门为 NT 优化的模式 ,用的是单进程+多线程。

至于说多线程同步 I/O 相对于使用 epoll/kqueue 异步 I/O 两种方式孰优孰劣,有兴趣的朋友可以参考我在另外一个问题的回答 。

同事的博客——
http://blog.chinaunix.net/uid/26972191.html 挨踢要留疤啊-ChinaUnix博客

阅读(967) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~