dean 发表于 2011-1-11 17:31:00

Win Proactor和Linux ACE_Dev_Poll_Reactor,谁更快?

测试了WIN平台下Proactor的速度,10000个连接大概17s处理完成。但是使用了ACE_Dev_Poll_Reactor,10000个连接要处理50s左右。按道理来说Epoll处理速度更快一些。

2个问题请教,1、如何判断是否启用了Epoll,在config文件里面做了配置#define。
                  2、Epoll的处理是否快过IOCP.

nono436 发表于 2011-1-14 12:52:30

楼主测试代码怎么写的,10000个连接怎么测的?

winston 发表于 2011-1-14 19:32:35

这样比较并不科学。测试不能这样做。EPOLL和IOCP的性能都是不错的。

dean 发表于 2011-1-17 15:43:07

以后测试有误。
重新测试了下,100Mbps带宽下,linux处理数据如下
          数据大小        1000(端口)        5000        10000        20000
Linux        64KB        12(MB/s)        10.4        11.2        11.3

但是windows下 超过2000个链接,就经常有链接丢失,或者Connect error。
不知道原因,测试的数据大小太大?linux没有这个问题哦!不解。

dean 发表于 2011-1-18 10:18:51

经过测试发现 相同XP SP3的机器有一些只能建立 2000-3970个链接。
而有一些机器能建立5000以上的连接。

看了注册表,最大端口数都是 65534。 无解中,还在找原因。

winston 发表于 2011-1-18 10:42:15

不要误解概念,能建立多少链接,与端口号无关。参阅UNIX网络编程卷1,里面有细说。
因为TCP/IP链接,是一对,四个信息,IP:PORT - IP:PORT,即便本地只用一个端口,也可以建立很多很多链接。建立的链接数,主要跟内存有关,还有操作系统的限制。这些话题你检索一下本站,早就讨论过了。

dean 发表于 2011-1-18 16:04:19

本帖最后由 dean 于 2011-1-18 16:07 编辑

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

TcpNumConnections
Key: Tcpip\Parameters
取值类型:REG_DWORD - Number
取值范围:0 - 0xfffffe
缺省值:0xfffffe
描述:本参数限制可以同时打开的TCP连接的数量

MaxUserPort
key: Tcpip\Parameters
取值类型:REG_DWORD - Number
取值范围:5000-65534 (十进制)
缺省值:0x1388 (5000 十进制)
描述:控制一个应用程序可以打开的最多端口数量。通常,短命的端口在1024-5000之间分配。
当试图发起5000以上端口的连接,系统将出现WSAENOBUFS(10055)错误:因为队列满或者系统
缺乏足够的缓冲空间。

正在看Unix网络编程,低层知识太匮乏了。

有人说可以支持10W个连接,但是看参数好像最大才65535。请教。
页: [1]
查看完整版本: Win Proactor和Linux ACE_Dev_Poll_Reactor,谁更快?