日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转:libev和libevent的设计差异

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转:libev和libevent的设计差异 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉:http://www.cnblogs.com/Lifehacker/p/whats_the_difference_between_libevent_and_libev_chinese.html

?

[譯]libev和libevent的設計差異

本文譯自what's the difference between libev and libevent??作者是libev作者

?

[問]兩個庫都是為異步io調度而設計,在Linux上都是使用epoll機制,在FreeBSD上則都是kqueue,還有諸如此類的很多相通之處。

?

除了這些表面上的差別外,其實這兩者根本的區別在哪里呢?比如架構上,或者設計哲學上。

?

[答]就設計哲學來說,libev的誕生,是為了修復libevent設計上的一些錯誤決策。例如,全局變量的使用,讓libevent很難在多線程環境中使用。watcher結構體很大,因為它們包含了I/O,定時器和信號處理器。額外的組件如HTTP和DNS服務器,因為拙劣的實現品質和安全問題而備受折磨。定時器不精確,而且無法很好地處理時間跳變。

?

libev試圖改進所有這些缺陷,例如避免使用全局變量,轉而在所有函數中,使用上下文變量來代替。每個事件類型,使用單獨的watcher類型(一個I/O watcher在64位機器上,只需要56字節。而libevent需要136字節)。允許額外的事件類型,例如基于掛鐘的計時器,或者單調時間,線程內中斷,準備并檢查watchers來嵌入其他事件循環,或者被用于其他事件循環來嵌入。

?

額外組件的問題,是通過直接去掉額外組件來解決的,這樣libev就可以小而美,快速高效了。但你也需要從其他地方尋找http庫。因為libev沒有帶上。(例如,有一個庫叫libeio,可以完成異步IO的工作,也可以和libev配合使用)。

?

總而言之,libev試圖做好一件事而已(目標是成為POSIX的事件庫),這是最高效的方法。libevent則嘗試給你全套解決方案(事件庫,非阻塞IO庫,http庫,DNS客戶端)

?

一句話總結,libev嘗試追隨UNIX工具箱哲學,一次只干一件事,每次都做到最好。

?

注意,這是libev的設計哲學,我想我作為libev的設計者,有著足夠的發言權。至于這些設計目標有沒有實際達到,或者這些設計哲學是否堅實可靠,則交由你來評判。

?

[譯者注]第一次注意到libev,是在gevent的開發者blog上的這篇libev and libevent,它簡要說明了gevent從libevent切換到libev的決策過程?;仡檊event,它實際需要的只是一個負責事件循環的C庫,在上面的HTTP庫和DNS庫,都可以交由標準庫強大得不得了的python完成。因此,作者的選擇還是非常明智的。

?

從Libevent 2.0來看,libevent團隊已經意識到上述的問題,也提取出了event loop這個上下文context,但是在具體的DNS解析,HTTPS連接等等,還是有種力不從心的感覺。作為libevent的使用者,我們經歷了libevent的試錯階段,發現HTTPS實現不行,再切換到libcurl去,與其這樣,倒不如直接不提供該功能呢

?

總結

以上是生活随笔為你收集整理的转:libev和libevent的设计差异的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。