2012-05-07 46 views
6

我正在使用ning異步http客戶端來實現非阻塞優勢。做一個蘋果vs蘋果測試(非阻塞與阻塞),我看到非阻塞版本正在提供更多的請求示例,但異步http客戶端正在創建更多的線程與其阻塞對象相比。這是預期的還是我錯過的東西?異步http客戶端(寧)創建更多的線程?

下面是從壓力測試

Async Http Client 
jMeter - 2 threads, 120 seconds, 1 sec ramp up 
Peak threads : 270 
Heap usage: 600mb 
Peak cpu usage: 30% 
Total samples: 18228 

Blocking version 
jMeter - 2 threads, 120 seconds, 1 sec ramp up 
Peak threads: 118 
heap usage: 260mb 
cpu usage: 18% 
total samples: 1472 

我創建連接的線程池的數量(重複使用它們)

AsyncHttpClientConfig.Builder builder = new AsyncHttpClientConfig.Builder(); 
builder.setRequestTimeoutInMs(2000); 
builder.setMaximumConnectionsPerHost(10); 
builder.setMaximumConnectionsTotal(100); 
client = new AsyncHttpClient(builder.build()); 

有我丟失的東西嗎?我試着看看線程轉儲,看看什麼是創建線程,但沒有發現任何有用的東西。 我敢打賭,每個http連接都有一個線程用於在異步http客戶端的I/O完成時觸發回調。

回答

11

編輯2015年11月16日

貌似回購移動。請參閱this line,您可以在其中更改所使用的ThreadFactory。如果沒有設置,它看起來像使用默認的。 ChannelManager here使用此項。

您還可以設置它的簡單客戶端上所看到here

ORIGINAL W /死鏈接刪除

快速瀏覽一下代碼 - 它看起來像應用程序線程池使用一個Executor服務這是一個緩存線程池,它根據需要創建線程。您可以通過使用構建器上的setter來設置客戶端使用的執行程序服務。

+0

大,非常感謝 – Vinodh

+0

https://github.com/AsyncHttpClient/async-http-client/blob/master/api/src/main/java/org/asynchttpclient/AsyncHttpClientConfig.java 你不介意查明160行多一點(如函數名稱,看到那裏),因爲它在最近的版本中更改 –

+0

這裏的鏈接不工作! –