更新時間:2022-10-11 09:39:51 來源:動力節點 瀏覽1680次
線程有兩種主要的通信方式。共享內存和消息傳遞。
所有線程都可以訪問相同的內存。他們正在處理不同的數據塊,但如果需要,他們可以使用其他人的結果。線程的執行需要同步,尤其是當進行下一步計算時,一個線程需要來自另一個線程的數據。
在這種情況下,每個線程都可以發送和接收消息。他們正在使用一個隊列來存儲消息,直到它被處理。如果我們想獲得線程之間的雙向通信,建議使用兩個隊列。隊列的長度應根據工作量而定。
假設您有 100 個線程(T0、T1、T2、...、T99),我們想要檢測 [1, 100 000] 范圍內的素數。我該如何解決這個問題?
首先,我應該嘗試創建一個函數來告訴我一個數字是否是素數。
bool isPrime(int n) {
bool prime = true;
如果(n == 0 || n == 1){
素數= 假;
}
else {
for (int i = 2; i <= n / 2; ++i) {
if (n % i == 0) {
prime = false;
休息;
}
}
}
返回素數;
}
假設您有 100 個線程(T0、T1、T2、...、T99),我們想要檢測 [1, 100 000] 范圍內的素數。我該如何解決這個問題?
首先,我應該嘗試創建一個函數來告訴我一個數字是否是素數。
我們如何將 1 到 100 000 的數字映射到我們的 100 個線程?
每個線程應該解決一大塊 1000 個數字。
映射 1:T0 計算來自 [1, 1000]、T1 - [1001, 2000] 等的數字。
映射2:我們按順序給每個線程一個數字。在第一次迭代中,來自 [1, 100] 的數字,第二次迭代 [101, 200] 等。線程 T1 將計算 [1, 101, 201, ...]。
第二個映射更好,因為所有線程的數字都來自相同的值范圍,并且工作負載是平衡的。在第一種情況下,T0 要做的事情較少,來自 [1,1000] 的數字和 T99 的數字很大 [90 001, 100 000]。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習