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團隊在下個版本做得更出色.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM