python全栈开发基础【第二十三篇】线程
一、什么是線程
線程:顧名思義,就是一條流水線工作的過程,一條流水線必須屬于一個車間,一個車間的工作過程是一個進程
所以,進程只是用來把資源集中到一起(進程只是一個資源單位,或者說資源集合),而線程才是cpu上的執行單位。
多線程(即多個控制線程)的概念是,在一個進程中存在多個控制線程,多個控制線程共享該進程的地址空間,相當于一個車間內有多條流水線,都共用一個車間的資源。(一個進程里面開多個線程(共享同一個進程里面的內存空間))
? ? ? 例如,北京地鐵與上海地鐵是不同的進程,而北京地鐵里的13號線是一個線程,北京地鐵所有的線路共享北京地鐵所有的資源,比如所有的乘客可以被所有線路拉。
注意:
1.所以進程里面真正干活的是線程(進程里面有線程)
2.進程只是用來把資源互相隔離開,而線程才是真正負責cpu來調動他的
二、線程的創建開銷小?
創建進程的開銷要遠大于線程?
如果我們的軟件是一個工廠,該工廠有多條流水線,流水線工作需要電源,電源只有一個即cpu(單核cpu)
一個車間就是一個進程,一個車間至少一條流水線(一個進程至少一個線程)
創建一個進程,就是創建一個車間(申請空間,在該空間內建至少一條流水線)
而建線程,就只是在一個車間內造一條流水線,無需申請空間,所以創建開銷小
三、線程與進程的區別
1.創建線程比進程開銷小(開一個進程,里面就有空間了,而線程在進程里面,就沒必要在開一個空間了)
2.多線程一定是在一個進程里面開啟的,共享進程里面的資源
3.線程啟動的速度快
4.同一進程下的多個線程共享進程的資源,而多個進程之間內存空間是隔離的
n = 100
def work():
global n
n-=100
如果開進程n是相互獨立的,而線程是共享了資源,就不隔離了
在wins下開進程,子進程不會拷貝父進程的
在linux下開進程,子進程會完全拷貝父進程的
5.線程可以跟它所在的進程之內 的線程通信
四、為何要用多線程
多線程指的是,在一個進程中開啟多個線程,簡單的講:如果多個任務共用一塊地址空間,那么必須在一個進程內開啟多個線程。詳細的講分為4點:
1. 多線程共享一個進程的地址空間
? ? ? 2. 線程比進程更輕量級,線程比進程更容易創建可撤銷,在許多操作系統中,創建一個線程比創建一個進程要快10-100倍,在有大量線程需要動態和快速修改時,這一特性很有用
? ? ? 3. 若多個線程都是cpu密集型的,那么并不能獲得性能上的增強,但是如果存在大量的計算和大量的I/O處理,擁有多個線程允許這些活動彼此重疊運行,從而會加快程序執行的速度。
? ? ? 4. 在多cpu系統中,為了最大限度的利用多核,可以開啟多個線程,比開進程開銷要小的多。(這一條并不適用于python)
?
轉載于:https://www.cnblogs.com/xiaohema/p/8454520.html
總結
以上是生活随笔為你收集整理的python全栈开发基础【第二十三篇】线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么寻回执行页内操作时的错误磁盘的数据
- 下一篇: linux下sort命令使用详解---l