我嘗試了很多開源軟件,並且我注意到在開源世界中有相當數量的服務器類型應用程序使用libevent來促進基於事件的處理,而不是產生多個線程處理請求。我也做了很多.NET編程(這是我的核心工作職能),並且我很想學習libevent如何與.NET事件模型相關聯。 .NET中的事件等同於C程序的libevent?我應該嘗試學習libevent並嘗試在自定義的.NET服務器應用程序中使用它,或者使用標準的.NET事件模型基本上是一樣的嗎?libevent,windows和.NET編程
8
A
回答
8
.NET事件和libevent並不相同,儘管它們共享抽象概念。
.NET事件允許CLR組件之間的非確定性通信。 In C#,組件是一個對象 - 事件是類成員。在其他語言中,like F#,對象不是必需的。一個事件允許消費者訂閱在源中特定條件下發生的通知 - 單擊按鈕,下載完成,發生異常等。.NET事件的一些特徵:
- 它們是不綁定到底層操作系統
- 您可以爲任何條件定義事件。
- 它們本質上不是異步的(通知程序和通知不一定在同一時間運行,儘管它們可以)。
的libevent允許OS和消費者之間的非確定性的,異步通信。這可能與.NET事件類似,因爲它們都是反轉控制,但機制有很大不同。
- libevent使用操作系統特定的非阻塞I/O(/dev/poll, kqueue, epoll)來提高性能。您的結果將因您使用的操作系統和機制而異。
- libevent事件條件包括文件描述符,OS信號或超時的狀態更改。您無法定義任意回調條件。
- libevent本質上是異步的。消費者在等待操作系統返回時不會阻塞。
我應該努力學習的libevent和 嘗試在自定義.NET 服務器應用程序使用它...?
如果你是爲了好玩而做的,當然。如果你是爲了工作而做的,可能不是。 libevent聲稱它在* nix系統上表現最大。 Windows使用不同的網絡範例。版本2中的libevent開發者是addressing these differences,但2.0.5仍然是beta版本。
此外,.NET還提供了自己的非阻塞I/O庫including asynchronous sockets。
相關問題
- 1. Windows服務和線程編程.NET
- 2. libevent evhttp和ipv6
- 3. libevent和libevent-dev之間的區別
- 4. 「幽靈」行,SQL Server 2008 + .NET Windows編程
- 5. 在C編程中用libevent編寫非阻塞事件
- 6. Visual Studio和.NET編程
- 7. 構建Windows的memcached需要libevent嗎?
- 8. C#.Net Windows應用程序印地語編寫和顯示
- 9. Libevent多線程支持
- 10. php libevent是多線程的?
- 11. 與libevent的多進程php
- 12. .NET是否爲通用Windows編程.NET Core的子集?
- 13. libevent,在
- 14. Memcached與Windows和.NET
- 15. 在centos6上編譯。 libevent問題
- 16. Libevent 2.0.22項目編譯問題(OSX)
- 17. 用.net編程
- 18. WPF .Net編程
- 19. 編程,.NET
- 20. 如何在編譯時靜態鏈接libevent和gcc?
- 21. .NET編程和與USB設備接口
- 22. Libevent bufferevent socket flush
- 23. .NET編程語言
- 24. 編程Windows Phone 7與正常的.NET編程有什麼不同?
- 25. Windows編程win32
- 26. C++,Windows編程
- 27. windows .net跨進程同步
- 28. XAML和Windows Mobile(.Net Compact Framework)
- 29. Windows API和.net語言
- 30. Windows 7,VS2010,.NET和AxMSCommLib