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