Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: correct wrong translation in ch20-02-multithreaded.md #212

Merged
merged 1 commit into from
Aug 24, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/ch20-02-multithreaded.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

**執行緒池**(thread pool)會產生一群執行緒來等待並隨時準備好處理任務。當程式收到新任務時,它會將此任務分配給執行緒池其中一條執行緒,然後該執行緒就會處理該任務。池中剩餘的執行緒在第一條執行緒處理任務時,仍能隨時處理任何其他來臨的任務。當第一條執行緒處理完成時,他會回到閒置執行緒池之中,等待處理新的任務。執行緒池讓你能並行處理連線,增加伺服器的吞吐量。

我們會限制執行緒池的數量為少量的數量就好,以避免我們造成阻斷服務(Denial of Service,DOS)攻擊。如果我們的程式每次遇到新的請求時就產生新的執行緒,某個人就可以產生一千萬個請求至我們的伺服器,來破壞並用光我們伺服器的資源,並導致所有請求的處理都被擱置。
我們會限制執行緒池的數量為少量的數量就好,以避免我們遭受阻斷服務(Denial of Service,DOS)攻擊。如果我們的程式每次遇到新的請求時就產生新的執行緒,某個人就可以產生一千萬個請求至我們的伺服器,來破壞並用光我們伺服器的資源,並導致所有請求的處理都被擱置。

所以與其產生無限制的執行緒,我們會有個固定數量的執行緒在池中等待。當有請求來臨時,它們會被送至池中處理。此池會維護一個接收請求的佇列(queue)。每個執行緒會從此佇列彈出一個請求、處理該請求然後再繼續向佇列索取下一個請求。有了此設計,我們就可以同時處理 `N` 個請求,其中 `N` 就是執行緒的數量。如果每個執行緒都負責到需要長時間處理的請求,隨後的請求還是會阻塞佇列,但是我們至少增加了能夠同時處理長時間請求的數量。

Expand Down