python線程理論

1、什麼是線程python

線程:顧名思義,就是一條流水線工做的過程,一條流水線必須屬於一個車間,一個車間的工做過程是一個進程linux

因此,進程只是用來把資源集中到一塊兒(進程只是一個資源單位,或者說資源集合),而線程纔是cpu上的執行單位。多線程

 多線程(即多個控制線程)的概念是,在一個進程中存在多個控制線程,多個控制線程共享該進程的地址空間,至關於一個車間內有多條流水線,都共用一個車間的資源。(一個進程裏面開多個線程(共享同一個進程裏面的內存空間))性能

      例如,北京地鐵與上海地鐵是不一樣的進程,而北京地鐵裏的13號線是一個線程,北京地鐵全部的線路共享北京地鐵全部的資源,好比全部的乘客能夠被全部線路拉。操作系統

注意:線程

1.因此進程裏面真正幹活的是線程(進程裏面有線程)進程

2.進程只是用來把資源互相隔離開,而線程纔是真正負責cpu來調動他的內存

2、線程的建立開銷小 資源

建立進程的開銷要遠大於線程?軟件

若是咱們的軟件是一個工廠,該工廠有多條流水線,流水線工做須要電源,電源只有一個即cpu(單核cpu)

一個車間就是一個進程,一個車間至少一條流水線(一個進程至少一個線程)

建立一個進程,就是建立一個車間(申請空間,在該空間內建至少一條流水線)

而建線程,就只是在一個車間內造一條流水線,無需申請空間,因此建立開銷小

3、線程與進程的區別

1.建立線程比進程開銷小(開一個進程,裏面就有空間了,而線程在進程裏面,就不必在開一個空間了)
2.多線程必定是在一個進程裏面開啓的,共享進程裏面的資源
3.線程啓動的速度快
4.同一進程下的多個線程共享進程的資源,而多個進程之間內存空間是隔離的
n = 100
def work():
global n
n-=100
若是開進程n是相互獨立的,而線程是共享了資源,就不隔離了

在wins下開進程,子進程不會拷貝父進程的
在linux下開進程,子進程會徹底拷貝父進程的

5.線程能夠跟它所在的進程以內 的線程通訊

4、爲什麼要用多線程

多線程指的是,在一個進程中開啓多個線程,簡單的講:若是多個任務共用一塊地址空間,那麼必須在一個進程內開啓多個線程。詳細的講分爲4點:

  1. 多線程共享一個進程的地址空間

      2. 線程比進程更輕量級,線程比進程更容易建立可撤銷,在許多操做系統中,建立一個線程比建立一個進程要快10-100倍,在有大量線程須要動態和快速修改時,這一特性頗有用

      3. 若多個線程都是cpu密集型的,那麼並不能得到性能上的加強,可是若是存在大量的計算和大量的I/O處理,擁有多個線程容許這些活動彼此重疊運行,從而會加快程序執行的速度。

      4. 在多cpu系統中,爲了最大限度的利用多核,能夠開啓多個線程,比開進程開銷要小的多。(這一條並不適用於python)

相關文章
相關標籤/搜索