?
1,和其他async io类似的 iasyncresult
?
2,3.5后新增的socketasyncargs。。
?
据msdn说 第二种的性能有极大的提高。。我简单测试过。。在 accept socket这里,,速度是很快,大约为前者的3-4倍
?
测试环境 win xp sp3
前者 1秒钟大约能accept 500个socket
?
后者 可以达到 2000个。。
?
在处理数据收发 方面 两者的开销差不多,没有表现出特别明显的差异。。。
?
但是在mono上就不是这么一回事了。。。mono 2.6.x后也多了一个 socketasyncargs的实现。但是文档是没有的。。iasyncresult 有文档。。描述和msdn大致上差不多。。。
?
在mail-list上有人提过mono上的socketasyncargs是用thread来对应每一个请求性能很低 云云。。再进一步的资料就没有了,于是决定一试
?
测试环境 ubuntu 9.10 desktop.. mono是从svn下的。2.8 preview的版本。
?
默认的 ulimit -n 是 1024.。
?
iasyncresult 可以连接到1019.。然后报描述符溢出。。正常
?
socketasyncargs 只能连接到501 左右。。
?
修改 ulimit -n 到 12000。。测试 10000个 长连接
?
iasyncresult 可以正常工作。。 socketasyncargs 在连接到8601的时候 直接退出 报了一个assert 声明。。具体是什么没看。
?
由此推断。。socketasyncargs在mono上 没有使用到epoll,实现上也存在问题。。。
?
我看过 ice 3.4.1的代码,.net版本依然 还是使用 iasyncresult 并没有因为 socketasyncargs高效而替代。我想很有可能是为了兼容mono的原因。。。
?
如果要写一个跨平台的基于.net async socket server 建议还是使用 iasyncresult。。。