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

以上所說的是相對于所有語言來說的,Python的特殊之處在于Python有一把GIL鎖,這把鎖限制了同一時間內一個進程只能有一個線程能使用cpu
二、threading模塊
這個模塊的功能就是創建新的線程,有兩種創建線程的方法:
1.直接創建
import threadingimport timedef foo(n): print('>>>>>>>>>>>>>>>%s'%n) time.sleep(3) print('tread 1')t1=threading.Thread(target=foo,args=(2,))#arg后面一定是元組,t1就是創建的子線程對象t1.start()#把子進程運行起來print('ending')上面的代碼就是在主線程中創建了一個子線程
新聞熱點
疑難解答