多線程編程基礎(chǔ) 為什么要使用并發(fā)(多線程)編程?
為什么要使用并發(fā)(多線程)編程?并發(fā)編程又叫多線程編程。在程序中,一般說來有很多很耗時(shí)的工作,比如上傳文件、下載文件、跟客戶去聊天需要長(zhǎng)時(shí)間組建再連接。這種時(shí)候,一個(gè)線程是服務(wù)不了多個(gè)用戶的,會(huì)有一種
為什么要使用并發(fā)(多線程)編程?
并發(fā)編程又叫多線程編程。在程序中,一般說來有很多很耗時(shí)的工作,比如上傳文件、下載文件、跟客戶去聊天需要長(zhǎng)時(shí)間組建再連接。這種時(shí)候,一個(gè)線程是服務(wù)不了多個(gè)用戶的,會(huì)有一種而且資源一人獨(dú)吞產(chǎn)生的靜靜的等待問題?;蛘撸簠R編語(yǔ)言一個(gè)耗時(shí)的單線程程序:空白文檔一個(gè)實(shí)現(xiàn)對(duì)話框的應(yīng)用程序SingleThread,在主對(duì)話框IDD_SINGLETHREAD_DIALOG先添加一個(gè)按鈕,ID為IDC_SLEEP_SIX_SECOND,標(biāo)題為“顯示延時(shí)6秒”,再添加按鈕的響應(yīng)函數(shù),代碼不勝感激:voidCSingleThreadDlg::OnSleepSixSecond(){Sleep(6000)//顯示延遲6秒}程序編譯并運(yùn)行應(yīng)用程序,右擊“延遲現(xiàn)象6秒”按鈕,你就能發(fā)現(xiàn)在這6秒期間程序就象“死機(jī)”一樣,還在吶喊之聲其它消息。目的是好地一次性處理這種耗時(shí)的操作,我們有必要自學(xué)——多線程編程。
既然Python解釋器是單線程的,還有進(jìn)行多線程編程的必要嗎?
謝小秘書邀請(qǐng)~~
先很簡(jiǎn)單能回答:有必要。
是需要,線程耗掉的是CPU資源要是另一個(gè)單線程內(nèi)去處理的業(yè)務(wù)邏輯會(huì)占用帶寬100%的CPU資源,這樣的話,上了多線程又是是沒有得用。
但這個(gè)一般很少,高CPU占用像是出現(xiàn)在內(nèi)存算出場(chǎng)景下,或則松動(dòng)代碼中錯(cuò)誤的死循環(huán)。正常情況下,CPU占用大于80%就是需要進(jìn)行代碼或電腦設(shè)計(jì)的優(yōu)化,或是服務(wù)器增加資源了。
多線程場(chǎng)景適用于可以解決中等速度IO的問題我們絕大部分的計(jì)算,都會(huì)依賴性太強(qiáng)于很多外部資源IO,如磁盤讀寫、網(wǎng)絡(luò)訪問、數(shù)據(jù)庫(kù)訪問...這些資源的訪問速度仍舊少于CPU的可以切換速度。如果沒有建議使用單線程進(jìn)行操作時(shí),都會(huì)長(zhǎng)時(shí)間的在等待IO的返回。照成無效耐心的等待,性能孱弱。
因此除非是Python,為了利用好CPU資源,能提高性能,在通常的業(yè)務(wù)場(chǎng)景下在用多線程編程確實(shí)是全部必要的。
多核與Python多實(shí)例被傳承上面的問題,我們明白現(xiàn)在CPU大部分是多核的,python就是為了盡量減少單線程只有可以使用到一個(gè)核的問題,是有個(gè)multiprocessing庫(kù)的,不能創(chuàng)建子進(jìn)程(子進(jìn)程數(shù)好象與核心數(shù)是一樣的),來充分利用CPU資源。
↓↓↓不喜歡就默默點(diǎn)贊吧,感謝各位評(píng)論指教,謝謝關(guān)注--極迭代!