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