1. 程式人生 > >設定正確的執行緒數量

設定正確的執行緒數量

  《高效能伺服器架構 》中提到了SEDA,我搜了一下,發現這篇文章《SEDA效能優化的分析和模擬 》,對於執行緒數量的建議。假如一個Web請求,程式碼執行的時間為ST(Service Time),讀檔案、網路呼叫之類IO等待時間為為WT(Wait Time),CPU的個數是N、核數是M則執行緒數量TC(Thread Count)為:

    TC= N*M*(1+WT/ST)

    假如只有1個單核的CPU,如果IO為40毫秒,程式執行要20毫秒,那麼可以得出如下的執行序列。

    Request1 執行20毫秒,等待40毫秒,此時CPU空閒。

    Request2 接著執行20毫秒,等待40毫秒,此時Request1還需要等待20毫秒。

    Request3 接著執行20毫秒,等待40毫秒,此時Request2還需要等待20毫秒,Request1執行完畢。

    Request4 就可以重用Request1的執行緒了。

    按照這個公式,假如1個單核的CPU,存在下面三種應用場景:

    S1:ST=10 WT=0 TC=1

    S2:ST=10 WT=50 TC=6

    S3:ST=10 WT=100 TC=11

    S1是純粹的計算,沒有IO,只消耗CPU;S2是本地檔案的訪問,有磁碟IO;S3是呼叫資料庫,有網路IO。

    假如S1佔總請求數量的10%,S2佔20%,S3佔70%,此時的TC應該是多少?假如百分比為PER

    TC = N*M*(1 + ( WT1*PER1 + WT2*PER2 ... WTn*PERn)/( ST1*PER1 + ST2*PER2 ... STn*PERn) )

 也就是 說總的等待時間/總的執行時間

    上面的場景,按照公式為

    TC = 1 * 1 * ( 1 + 80/10 ) = 9

    對於SEDA細節,以後再研究吧。

==========================================================================

效能相關的系列文章: