我正在創建一個服務器,它將處理多個併發客戶端連接(大約100個),其中客戶端抽取大量數據和服務器包並將其發送到另一個遠程位置。在單個事件循環中是否允許多個cURL多個句柄?
我想做的是將從每個客戶端發送的數據「分組」到他們自己的數據結構中(比如說一些鏈表),並且同時處理這些列表。吞吐量很重要,所以我希望能夠儘可能多地發送數據(可以說最多可同時處理10k個簡單的句柄)。
我想到的方法是:
- 有一個大的線程池(比如100個線程),其中每個處理一個簡單的句柄。
- 有一個單線程處理所有10k簡單句柄的多句柄。
- 創建多個線程(如4)處理多個句柄,因此每個句柄處理2500個簡單的句柄。
- 每個客戶端都有一個多處理器,因此每個處理一個多處理器的線程可能有100個。
我想知道的是,我是否可以'組合'#2和#3,使得我有一個線程可以在單個事件循環中處理多個多個句柄。這樣的事情是否允許,如果是的話,它會更有意義嗎?如果可能的話,它將滿足我對每個多句柄分組客戶端的要求,並且還可以讓我利用每個多句柄的持久連接。如果沒有,我完全利用所有客戶端的持續連接的唯一方法是選項#4。最好我想減少使用的線程數量,這是由於我們所遵循的編程模型存在某些限制。
非常感謝您的快速響應!如果使用選項#3,我打算讓多個線程擁有一個內核,所以完全同意你的看法。我的計劃也是使用'curl_multi_socket_action' API,所以看起來我在正確的軌道上(這是我第一次使用curl)。我們仍然很高興知道它允許每個線程擁有多個多線程,但我想我會選擇#3並且看看這是怎麼回事。 – James 2014-09-08 17:53:57