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. 楼主测试代码怎么写的,10000个连接怎么测的? 这样比较并不科学。测试不能这样做。EPOLL和IOCP的性能都是不错的。 以后测试有误。
重新测试了下,100Mbps带宽下,linux处理数据如下
数据大小 1000(端口) 5000 10000 20000
Linux 64KB 12(MB/s) 10.4 11.2 11.3
但是windows下 超过2000个链接,就经常有链接丢失,或者Connect error。
不知道原因,测试的数据大小太大?linux没有这个问题哦!不解。 经过测试发现 相同XP SP3的机器有一些只能建立 2000-3970个链接。
而有一些机器能建立5000以上的连接。
看了注册表,最大端口数都是 65534。 无解中,还在找原因。 不要误解概念,能建立多少链接,与端口号无关。参阅UNIX网络编程卷1,里面有细说。
因为TCP/IP链接,是一对,四个信息,IP:PORT - IP:PORT,即便本地只用一个端口,也可以建立很多很多链接。建立的链接数,主要跟内存有关,还有操作系统的限制。这些话题你检索一下本站,早就讨论过了。 本帖最后由 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]