我正在爲消息傳遞庫編寫IO核心,並考慮libuv與使用Linux上的原始epoll和Windows上的IOCP(以及最終其他人,solaris事件等)我喜歡可移植性libuv,我在看性能。libuv與原始epoll或IOCP
epoll和IOCP允許多個線程直接等待IO事件,內核執行調度。儘管我沒有任何數字,但比用戶空間調度更有效。
libuv(基於我的閱讀)有一個線程-USafe事件循環,但我可以實現一個領導者跟隨者線程池。我的意思是一個線程(一次)是等待事件的「領導者」。當領導得到一個事件時,它表明一個追隨者應該接任領導。前領導者處理事件,然後成爲追隨者。
我的希望是,應該在性能上接近原始的多線程epoll/IOCP,假設libuv被有效地實現。我會做我自己的測量,但我想聽到任何有經驗的人。
服務器建成了,我必須加快速度。多線程不是可選的,我們需要在多核機器上進行擴展。理想情況下,我想要一個可以將每個連接的活動序列化的便攜式多線程輪詢器(如epoll)。但是我認爲以leader-follower風格運行的單線程libuv事件循環可以實現這一訣竅 - 所有的應用程序工作都可以併發的每個連接,只有非常輕量級的異步讀/寫緩存切換才能通過libuv進行序列化。至少這就是我所希望的:) –
您可以採取以下方法:每個線程有一個循環,一個「主」線程處理傳入連接,並在一輪中使用「uv_write2」處理傳入連接並將其分派給「工作」線程 - 羅賓時尚。所以每個工人都會處理1/N的連接。 – saghul