Udemy Course Multithreading, Concurrency & Performance 11

Optimizing for Throughput Part 1

ZONGRU Li
Jun 30, 2021

以下討論內容為:

  1. Throughput definition
  2. 2 approaches to throughput improvement
  3. Thread Pooling

Throughput definition:

單位時間內完成的tasks數量

同樣系統下能在時間內處理的tasks數量當然越多越好!

2 approaches to throughput improvement:

Approach 1:

假設完成單一個Original task需要花費T時間

那麼Throughput = 1/T

當這個Original task拆分為N個sub-tasks

Latency = T/N

而Throughput = N/T (理論上)

但是在前面我們為了優化Latency(讓T/N變小)通常會造成:

實際的Throughput <N/T (in practice)

這是前面在做Latency Optimizing可觀察到的

但是考量到Task拆分為sub-tasks優化Latency會有以下因素:

  1. 將Task分解為sub-tasks +
  2. 建立Threads,將任務丟進Threads +
  3. thread.start()到thread真的進到排程之間的時間
  4. 等待最後完成的thread,並且才能開始Aggregate結果所需要的時間 +
  5. Aggregate各個sub-tasks處理的時間 +
  6. Aggregate各個sub-result為單一result處理的時間

最終sub-tasks還是會結合結果,所以在此考量Throughput就不是必要的

Approach 2:

考慮數個Threads同時處理N個Tasks情況下(注意,不是拆分的sub-task)

假設是依序執行才可以完成,總時間是T,則此情況考量下

Latency = T

而Throughput = N/T

而後面還有其他更進階的優化方式(例如 Thread Pooling)

Thread Pooling:

概念上就是應用程式啟動時建立固定數量的Threads

並且每個Thread從Queue中拿取Task做處理

所以當每個Thread都忙碌中,多的Task就要等待有空閒的Thread

當所有Threads都持續忙碌(滿載)時

我們就算是炸出滿載的Thoughput及滿載的Utilization(利用率)

implement Thread Pool並不是瑣碎的

在JDK裡面就有基本的Thread Pool工具可以使用

其中我們將用到:Fixed Thread Pool executor

其中這個executor內也會建立queue來佇列task給Thread處理

參考課程

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet