一、進(jìn)程與線程
1.進(jìn)程
我們電腦的應(yīng)用程序,都是進(jìn)程,假設(shè)我們用的電腦是單核的,cpu同時(shí)只能執(zhí)行一個(gè)進(jìn)程。當(dāng)程序出于I/O阻塞的時(shí)候,CPU如果和程序一起等待,那就太浪費(fèi)了,cpu會(huì)去執(zhí)行其他的程序,此時(shí)就涉及到切換,切換前要保存上一個(gè)程序運(yùn)行的狀態(tài),才能恢復(fù),所以就需要有個(gè)東西來記錄這個(gè)東西,就可以引出進(jìn)程的概念了。
進(jìn)程就是一個(gè)程序在一個(gè)數(shù)據(jù)集上的一次動(dòng)態(tài)執(zhí)行過程。進(jìn)程由程序,數(shù)據(jù)集,進(jìn)程控制塊三部分組成。程序用來描述進(jìn)程哪些功能以及如何完成;數(shù)據(jù)集是程序執(zhí)行過程中所使用的資源;進(jìn)程控制塊用來保存程序運(yùn)行的狀態(tài)
2.線程
一個(gè)進(jìn)程中可以開多個(gè)線程,為什么要有進(jìn)程,而不做成線程呢?因?yàn)橐粋€(gè)程序中,線程共享一套數(shù)據(jù),如果都做成進(jìn)程,每個(gè)進(jìn)程獨(dú)占一塊內(nèi)存,那這套數(shù)據(jù)就要復(fù)制好幾份給每個(gè)程序,不合理,所以有了線程。
線程又叫輕量級(jí)進(jìn)程,是一個(gè)基本的cpu執(zhí)行單元,也是程序執(zhí)行過程中的最小單元。一個(gè)進(jìn)程最少也會(huì)有一個(gè)主線程,在主線程中通過threading模塊,在開子線程
3.進(jìn)程線程的關(guān)系
(1)一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程
(2)資源分配給進(jìn)程,進(jìn)程是程序的主體,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源