偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

當(dāng)優(yōu)化擴(kuò)展到多核時(shí)……

移動(dòng)開(kāi)發(fā)
首先,我們需要確定,我們的單個(gè)任務(wù)是否可以分解;比如解析很多個(gè)文件,這樣的任務(wù)劃分成多個(gè)很簡(jiǎn)單;但如果是一個(gè)耗時(shí)的串行邏輯計(jì)算,后期的計(jì)算依賴前期的結(jié)果,這樣就不好拆分;這種形式可能需要在更高層次上來(lái)拆分;

當(dāng)優(yōu)化擴(kuò)展到多核時(shí)

"軟件開(kāi)發(fā)沒(méi)有銀彈,我們能做的就是選擇和平衡;"

上一篇文章我們聊了在單線程下程序優(yōu)化的5個(gè)方向(ref:《程序優(yōu)化的5個(gè)方向》);當(dāng)單核優(yōu)化到極值后,就到了多任務(wù)的情況;

 

想起來(lái)很清晰,單個(gè)任務(wù)分解成多個(gè)任務(wù),讓多個(gè)cpu同時(shí)來(lái)工作,并行執(zhí)行,效率自然就上去了;

 

但,未必就這么簡(jiǎn)單;

 

任務(wù)分解的粒度

 

首先,我們需要確定,我們的單個(gè)任務(wù)是否可以分解;比如解析很多個(gè)文件,這樣的任務(wù)劃分成多個(gè)很簡(jiǎn)單;但如果是一個(gè)耗時(shí)的串行邏輯計(jì)算,后期的計(jì)算依賴前期的結(jié)果,這樣就不好拆分;這種形式可能需要在更高層次上來(lái)拆分;

 

數(shù)據(jù)競(jìng)爭(zhēng)

 

編程就是計(jì)算和數(shù)據(jù);計(jì)算并行了,但數(shù)據(jù)還是訪問(wèn)同一份,訪問(wèn)共同的資源會(huì)產(chǎn)生資源競(jìng)爭(zhēng);

 

如果不進(jìn)行控制,可能導(dǎo)致同一份數(shù)據(jù)重復(fù)計(jì)算(多個(gè)讀的場(chǎng)景)或是臟數(shù)據(jù)的產(chǎn)生(有回寫的場(chǎng)景);

 

引入鎖

 

為了讓數(shù)據(jù)訪問(wèn)有序進(jìn)行,需要引入鎖來(lái)防止臟數(shù)據(jù);

 

控制鎖的粒度,是個(gè)需要精心考慮的話題;

 

比如對(duì)于大量讀少量寫的場(chǎng)景,相比一視同仁的加鎖,使用讀寫鎖能顯著提升效率;

 

我們?nèi)粘D芙佑|到的產(chǎn)品中,數(shù)據(jù)庫(kù)是個(gè)用鎖高手,在更新數(shù)據(jù)的時(shí)候,是鎖住行,還是列、或是表,不同的粒度性能相差明顯;

 

驚群現(xiàn)象

 

考慮這樣的場(chǎng)景:多個(gè)線程都在等在一個(gè)鎖,如果可以拿到鎖,線程就開(kāi)始工作(線程池)

 

當(dāng)鎖被釋放時(shí),如果喚醒多個(gè)線程可能會(huì)產(chǎn)生 驚群現(xiàn)象;

 

解決方案:

 

使用單線程方案/處理accpet連接 處理等待鎖的操作,讓任何時(shí)刻只有一個(gè)線程在等待鎖;

 

更多細(xì)節(jié)參考:

 

《客戶-服務(wù)器程序設(shè)計(jì)方法》中 預(yù)先創(chuàng)建線程池,每個(gè)線程各自accept 一節(jié)

 

數(shù)據(jù)復(fù)制

 

讓每個(gè)線程使用自己的數(shù)據(jù),讓數(shù)據(jù)不共有,這樣能去掉資源競(jìng)爭(zhēng),去掉鎖;

 

將數(shù)據(jù)復(fù)制為多份,減少競(jìng)爭(zhēng),各自訪問(wèn)各自的數(shù)據(jù);

 

但這又引入了一個(gè)新的問(wèn)題:如果各個(gè)線程回寫了數(shù)據(jù),如何保證這么數(shù)據(jù)的一致性?

 

畢竟它們代表的其實(shí)是一份數(shù)據(jù);

 

涉及到數(shù)據(jù)的一致性,多份數(shù)據(jù)之間的同步又是個(gè)難題;

 

數(shù)據(jù)分片

 

那好,換個(gè)思路,不使用數(shù)據(jù)復(fù)制;我們使用數(shù)據(jù)分片;分片這個(gè)思想更容易想到,既然“計(jì)算”被劃分為多個(gè)小任務(wù)了,那么數(shù)據(jù)也可以同樣處理;

 

將數(shù)據(jù)分片,每份數(shù)據(jù)存的內(nèi)容不相同,它們之間沒(méi)有共同點(diǎn);

 

這樣,數(shù)據(jù)訪問(wèn)沒(méi)有數(shù)據(jù)競(jìng)爭(zhēng),同時(shí)由于數(shù)據(jù)不同,也不涉及到數(shù)據(jù)一致性同步的問(wèn)題;

 

但,分片遠(yuǎn)遠(yuǎn)沒(méi)有想的那么美好;

 

分片導(dǎo)致了每個(gè)線程看到數(shù)據(jù)不再是全集,而是片段;這就注定了這個(gè)線程只能處理這部分的特定數(shù)據(jù);這樣,線程之間的計(jì)算失去了可替換性;某種工作只能在特定的線程上處理;

 

而如果有個(gè)任務(wù)需要訪問(wèn)所有的數(shù)據(jù),這樣就變得更加復(fù)雜;

 

原來(lái),分片之后,我們將難題向上推了,推到線程層面,需要考慮到業(yè)務(wù)邏輯層面的處理;

 

這樣,可能更加復(fù)雜;

 

ok,想要速度更快,使用多核來(lái)處理,需要面對(duì)更多的問(wèn)題;

 

將單機(jī)擴(kuò)展多機(jī)集群,涉及到架構(gòu)層面來(lái)看,其實(shí)我們的面對(duì)的問(wèn)題是類似的;

 

參考:《大型網(wǎng)站技術(shù)架構(gòu)》讀書筆記[2] - 架構(gòu)的模式

 

軟件開(kāi)發(fā)沒(méi)有銀彈,我們能做的就是選擇和平衡;

責(zé)任編輯:chenqingxiang 來(lái)源: 大CC
相關(guān)推薦

2020-06-05 14:30:03

CephCPU 線程

2013-02-21 09:41:49

CitusData數(shù)據(jù)庫(kù)Postgres

2020-06-16 11:12:26

醫(yī)療物聯(lián)網(wǎng)IOT

2023-07-07 09:55:23

互聯(lián)網(wǎng)論文

2021-10-25 15:50:42

區(qū)塊鏈金融科技

2009-11-12 15:19:54

2009-11-12 15:30:44

2009-02-26 10:50:04

NetApp虛擬化VMware ESX

2023-03-08 14:14:51

微軟ChatGPT

2024-05-20 08:35:00

模型定理

2012-10-31 09:32:41

思科思杰ADC

2017-05-26 23:09:47

2022-03-23 16:28:18

微軟NVIDIAGPU

2009-02-25 16:50:00

2021-01-01 09:46:43

微軟Windows 10Windows

2022-11-10 08:02:41

GitOpsDevOpsKubernetes

2010-10-22 14:35:44

VMwareCitrix云計(jì)算

2023-03-03 14:08:51

網(wǎng)絡(luò)安全首席信息安全官

2019-04-16 09:40:12

服務(wù)器系統(tǒng)數(shù)據(jù)庫(kù)

2019-04-04 09:59:06

服務(wù)器系統(tǒng)Web
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)