課程內(nèi)容
Python并發(fā)編程高級(jí)課程--線程
什么是線程?
上節(jié)課中,我們降到了進(jìn)程,知道了每創(chuàng)建一個(gè)進(jìn)程,都需要系統(tǒng)分配CPU、內(nèi)存、磁盤等資源。而系統(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à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)中,以這樣的角度來看,可將操作系統(tǒng)理解為一個(gè)包含各種進(jìn)程的容器。進(jìn)程運(yùn)行在操作系統(tǒng)這個(gè)容器里面,占用著操作系統(tǒng)的各種資源:CPU,內(nèi)存,磁盤等。
而線程是運(yùn)行在進(jìn)程內(nèi)部的執(zhí)行實(shí)體,一個(gè)線程對(duì)應(yīng)一個(gè)單一順序的控制流,從這一個(gè)角度來看,進(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)程的地址空間,打開的文件等。進(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)程間的通信:和人類社會(huì)一樣,每個(gè)進(jìn)程在執(zhí)行過程中也需要爭奪更多的系統(tǒng)資源來執(zhí)行自身程序,所以他們之間也需要通信,最常見的通信就是文件,共享內(nèi)存,信號(hào),套接字等。進(jìn)程之間的通信,本質(zhì)是數(shù)據(jù)傳輸。進(jìn)程間的同步:如果系統(tǒng)中只存在一個(gè)進(jìn)程,或系統(tǒng)中的進(jìn)程完全孤立
- 下一篇
Python并發(fā)編程高級(jí)課程--線程的同步和通信
線程通信:之前的課程中我們學(xué)過進(jìn)程之間的通信,線程之間的通信有所不同,線程之間的通信是通過全局對(duì)象來進(jìn)行通信的。舉例說明:進(jìn)程中的所有線程共享進(jìn)程的地址空間,可以定義一個(gè)全局變量,在各個(gè)不同進(jìn)程中,根據(jù)全局變量的不同狀態(tài),來執(zhí)行不同的進(jìn)程,類似于條件選擇語
