zoukankan      html  css  js  c++  java
  • Mono 3.2.3 Socket功能迎来一稳定的版本

    由于兴趣自己业余时间一直在搞.net下面的通讯应用,mono的存在得以让.NET程序轻松运行在Linux之下.不过经过多尝试Socket相关功能在Mono下的表现并不理想.不管性能还是吞吐能力方面离我想要的有比较大的差距.最后一次在2.10.x下测试情况下也比失望,主要是在连接数多数据交互量大的情况下会导致异步send操作虽然成功但会存在数据发送不出去的情况,这情况在应用中显然是不允许发生的;虽然发送可以用同步解决,但连接多的情况同步显然容易导致其他连接处理上存在延时,最终打消了在Mono做通讯的想法.

    最近Mono发布了新的版3.2.3看了一下感觉不错,顺便也下载了mono的源代码下来看了一下

    // Actual send() done in the runtime
    				if (result.error == 0) {
    					UpdateSendValues (result.Total);
    					if (result.Sock.disposed) {
    						result.Complete ();
    						return;
    					}
    
    					if (result.Size > 0) {
    						Socket.socket_pool_queue (Worker.Dispatcher, result);
    						return; // Have to finish writing everything. See bug #74475.
    					}
    					result.Total = send_so_far;
    					send_so_far = 0;
    				}
    				result.Complete ();

    发现早期版本SocketAsyncEventArgs存在发送不完整需要自己处理的情况在现有版本代码已经解决,于是就又提起对mono的兴趣.

    这次装了mono 3.2.3进行了一个简单的持久压力测试,的确之前碰到有个别情况数据没发送出去的问题已经解决了.虽然性能和WINDOWS下比起来还有段距离,不过总的来说还可以接受.以下是测试截图.

    测试大概是在1K个连接的基础上进行了大概2亿次的数据交互,每秒的请求交互量大概在1w左右. 测试服务端配置:

    cpu:一个核的虚机
    操作系统:Centos 6.5 64
    内存:1G
    mono 3.2.3

    在整个测试过程CPU大概占用了60-70之间.从测试结果来看,mono这版的socket处理能力还算可以接受的,希望mono团队在下个版本做得更出色.

  • 相关阅读:
    JS站点
    1011 World Cup Betting (20分)
    1007 Maximum Subsequence Sum (25分)(动态规划DP)
    1006 Sign In and Sign Out (25分)
    1005 Spell It Right (20分)
    1004 Counting Leaves (30分)(DFS)
    1003 Emergency (25分)(Dijkstra算法)
    1002 A+B for Polynomials (25分)
    1001 A+B Format (20分)
    canvas
  • 原文地址:https://www.cnblogs.com/smark/p/3417822.html
Copyright © 2011-2022 走看看