課程內(nèi)容
Python并發(fā)編程高級(jí)課程--線程
什么是線程?
上節(jié)課中,我們降到了進(jìn)程,知道了每創(chuàng)建一個(gè)進(jìn)程,都需要系統(tǒng)分配CPU、內(nèi)存、磁盤(pán)等資源。而系統(tǒng)中不止一個(gè)進(jìn)程。在進(jìn)程和進(jìn)程之間切換的時(shí)候,系統(tǒng)需要記錄之前進(jìn)程的執(zhí)行狀態(tài)信息,以便下次執(zhí)行時(shí)調(diào)用。由于在早期的電腦中,進(jìn)程的創(chuàng)建、切換、銷(xiāo)毀存在較大的開(kāi)銷(xiāo),現(xiàn)在的電腦都引入了一種能獨(dú)立運(yùn)行的基本單位-線程。 線程遠(yuǎn)比進(jìn)程輕量,只占用較少的系統(tǒng)資源,自線程被引入以后,線程成為系統(tǒng)進(jìn)行調(diào)度和執(zhí)行的最小單位。
線程、進(jìn)程、操作系統(tǒng)的基本關(guān)系?
進(jìn)程是操作系統(tǒng)進(jìn)行資源分配的基本單位,進(jìn)程運(yùn)行于系統(tǒng)中,以這樣的角度來(lái)看,可將操作系統(tǒng)理解為一個(gè)包含各種進(jìn)程的容器。進(jìn)程運(yùn)行在操作系統(tǒng)這個(gè)容器里面,占用著操作系統(tǒng)的各種資源:CPU,內(nèi)存,磁盤(pán)等。
而線程是運(yùn)行在進(jìn)程內(nèi)部的執(zhí)行實(shí)體,一個(gè)線程對(duì)應(yīng)一個(gè)單一順序的控制流,從這一個(gè)角度來(lái)看,進(jìn)程則是線程的容器。在支持多線程的操作系統(tǒng)中,一個(gè)進(jìn)程內(nèi)部可以并發(fā)執(zhí)行多個(gè)線程。
線程運(yùn)行在進(jìn)程這個(gè)容器里面,共享著進(jìn)程內(nèi)部的資源,這表現(xiàn)為:所有線程共享進(jìn)程的地址空間,打開(kāi)的文件等。進(jìn)程中的多個(gè)線程之間,可以并發(fā)地執(zhí)行,線程的執(zhí)行也是由操作系統(tǒng)進(jìn)行調(diào)度的,系統(tǒng)會(huì)根據(jù)實(shí)際情況,將線程指定給特定的CPU核心,以此進(jìn)行并發(fā)計(jì)算。

- 上一篇
Python并發(fā)編程高級(jí)課程--進(jìn)程間的通信和同步
進(jìn)程間的通信:和人類(lèi)社會(huì)一樣,每個(gè)進(jìn)程在執(zhí)行過(guò)程中也需要爭(zhēng)奪更多的系統(tǒng)資源來(lái)執(zhí)行自身程序,所以他們之間也需要通信,最常見(jiàn)的通信就是文件,共享內(nèi)存,信號(hào),套接字等。進(jìn)程之間的通信,本質(zhì)是數(shù)據(jù)傳輸。進(jìn)程間的同步:如果系統(tǒng)中只存在一個(gè)進(jìn)程,或系統(tǒng)中的進(jìn)程完全孤立
- 下一篇
Python并發(fā)編程高級(jí)課程--線程的同步和通信
線程通信:之前的課程中我們學(xué)過(guò)進(jìn)程之間的通信,線程之間的通信有所不同,線程之間的通信是通過(guò)全局對(duì)象來(lái)進(jìn)行通信的。舉例說(shuō)明:進(jìn)程中的所有線程共享進(jìn)程的地址空間,可以定義一個(gè)全局變量,在各個(gè)不同進(jìn)程中,根據(jù)全局變量的不同狀態(tài),來(lái)執(zhí)行不同的進(jìn)程,類(lèi)似于條件選擇語(yǔ)