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