信號(hào)量-Semaphore
線程的信號(hào)量和進(jìn)程的信號(hào)量用法無異:
事件-Event
通過event類將兩個(gè)方法連接起來進(jìn)行溝通:
線程池-ThreadPoolExecutor
線程池和進(jìn)程池用法是幾乎無異的,但是要注意它導(dǎo)入的模塊,提交的方法,參數(shù)的填寫方法,以及關(guān)閉的方法:
如果涉及返回值的時(shí)候呢?
直接打印的話會(huì)打印出一串內(nèi)存地址(自己嘗試)這時(shí)候需要調(diào)用.result方法(第14行)
但是我們從結(jié)果上看,程序變成了一個(gè)同步程序,大大降低了我們的效率。這時(shí)候我們可以采用新建列表的方式來進(jìn)行優(yōu)化:
協(xié)程-greenlet
我們都知道:
①進(jìn)程是計(jì)算機(jī)中最小的資源分配單位·
②線程是計(jì)算機(jī)中能被cpu調(diào)度的最小單位
現(xiàn)在有一個(gè)問題:能開啟的線程和進(jìn)程是有限的,但是我們要處理的任務(wù)是無限的。比如我現(xiàn)在有5萬個(gè)任務(wù)要執(zhí)行,難道我去開5萬個(gè)線程嗎?然后假設(shè)我開了300個(gè)線程,但是這300個(gè)線程都阻塞了,我仍然沒有充分利用CPU,(理想的情況是開啟一個(gè)線程,沒有IO只有計(jì)算,這叫充分利用CPU,但大多數(shù)的情況不是這樣的,多多少少會(huì)有一些阻塞情況),這時(shí)候協(xié)程(纖程)就派上用場(chǎng)了。一條線程在多個(gè)任務(wù)之間來回切換,切換這個(gè)動(dòng)作是需要浪費(fèi)時(shí)間的,但是對(duì)于CPU、操作系統(tǒng)來說,協(xié)程是不存在的,它們只能看見最小單位即線程。把一個(gè)線程的工作分成了好幾個(gè)任務(wù),在多個(gè)任務(wù)中來回切換的現(xiàn)象稱為協(xié)程。
寫一個(gè)簡(jiǎn)單地生產(chǎn)者消費(fèi)者模型:
①協(xié)程能把一個(gè)線程的執(zhí)行明確的區(qū)分開
②兩個(gè)任務(wù),協(xié)程幫助我記住哪個(gè)任務(wù)執(zhí)行到哪個(gè)位置上了,并且實(shí)現(xiàn)安全的切換
③一個(gè)任務(wù)不得不陷入阻塞了,在這個(gè)任務(wù)阻塞的過程中切換到另一個(gè)任務(wù)繼續(xù)執(zhí)行
④你的程序只要還有任務(wù)需要執(zhí)行你的當(dāng)前線程永遠(yuǎn)不會(huì)阻塞
⑤利用協(xié)程在多個(gè)任務(wù)陷入阻塞的時(shí)候進(jìn)行切換,來保證一個(gè)線程在處理多個(gè)任務(wù)的時(shí)候總是在忙碌
⑥能夠更加充分的利用cpu,搶占更多的時(shí)間片
⑦無論是進(jìn)程還是線程都是由操作系統(tǒng)來切換的,開啟過多的線程、進(jìn)程會(huì)給操作系統(tǒng)的調(diào)度增加負(fù)擔(dān)
⑧如果我們是使用的協(xié)程,協(xié)程在程序之間的切換操作系統(tǒng)感知不到
⑨無論開啟多少個(gè)協(xié)程對(duì)操作系統(tǒng)來說總是一個(gè)線程在執(zhí)行,操作系統(tǒng)的調(diào)度不會(huì)有任務(wù)的壓力
⑩協(xié)程的本質(zhì)就是一條線程,所以完全不會(huì)產(chǎn)生數(shù)據(jù)安全的問題。
對(duì)于協(xié)程所需要用到的模塊主要有兩個(gè),greenlet和gevent,其中g(shù)reenlet是gevent的底層邏輯模塊,主要控制協(xié)程的切換(手動(dòng)),gevent可以當(dāng)做是greenlet的升級(jí)版,功能比greenlet更加全面,需要安裝,安裝后即可直接使用。
可以看出,greenlet.switch可以幫助程序員手動(dòng)切換阻塞,但是如果想要自動(dòng)切換還需要用到gevent。
協(xié)程-gevent
gevent就是greenlet的完善版:
但是我們?nèi)绻裧event.sleep換成time.sleep呢?
很明顯,阻塞沒有被識(shí)別到,所以我們需要用到導(dǎo)入monkey,這樣就能將一些常見的阻塞識(shí)別。
審核編輯:劉清
-
線程池
+關(guān)注
關(guān)注
0文章
57瀏覽量
6856 -
線程
+關(guān)注
關(guān)注
0文章
505瀏覽量
19700 -
信號(hào)量
+關(guān)注
關(guān)注
0文章
53瀏覽量
8351
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論