Python——多线程与多进程
Python——多線程與多進(jìn)程
? ? ? 學(xué)習(xí)python進(jìn)階能力,多進(jìn)程與多線程的能力是必須的,不然真out了。以下內(nèi)容部分摘自博客:Python 多線程與多進(jìn)程、Python:多線程及多進(jìn)程的使用。
一、線程與進(jìn)程的概念(首推:楊秀璋的專欄,受益匪淺)
面試題:線程與進(jìn)程的概念與區(qū)別是什么?多線程與多進(jìn)程的概念與區(qū)別是什么?
1、什么是進(jìn)程?什么是線程?
?? ? ? ?進(jìn)程(process)和線程(thread)是操作系統(tǒng)的基本概念,進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位。線程是程序中一個(gè)單一的順序控制流程。進(jìn)程內(nèi)一個(gè)相對(duì)獨(dú)立的、可調(diào)度的執(zhí)行單元,是系統(tǒng)獨(dú)立調(diào)度和分派CPU的基本單位指運(yùn)行中的程序的調(diào)度單位。
2、線程與進(jìn)程之間的區(qū)別是什么?
(1)地址空間和其它資源(如打開(kāi)文件):進(jìn)程間相互獨(dú)立,同一進(jìn)程的各線程間共享。某進(jìn)程內(nèi)的線程在其它進(jìn)程不可見(jiàn)。
(2)通信:進(jìn)程間通信IPC,線程間可以直接讀寫(xiě)進(jìn)程數(shù)據(jù)段(如全局變量)來(lái)進(jìn)行通信——需要進(jìn)程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性。
(3)調(diào)度和切換:線程上下文切換比進(jìn)程上下文切換要快得多。
(4)在多線程O(píng)S中,進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體。
總結(jié),進(jìn)程和線程可以類比為火車和車廂。
- 線程在進(jìn)程下行進(jìn)(單純的車廂無(wú)法運(yùn)行)
- 一個(gè)進(jìn)程可以包含多個(gè)線程(一輛火車可以有多個(gè)車廂)
- 不同進(jìn)程間數(shù)據(jù)很難共享(一輛火車上的乘客很難換到另外一輛火車,比如站點(diǎn)換乘)
- 同一進(jìn)程下不同線程間數(shù)據(jù)很易共享(A車廂換到B車廂很容易)
- 進(jìn)程要比線程消耗更多的計(jì)算機(jī)資源(采用多列火車相比多個(gè)車廂更耗資源)
- 進(jìn)程間不會(huì)相互影響,一個(gè)線程掛掉將導(dǎo)致整個(gè)進(jìn)程掛掉(一列火車不會(huì)影響到另外一列火車,但是如果一列火車上中間的一節(jié)車廂著火了,將影響到該趟火車的所有車廂)
- 進(jìn)程可以拓展到多機(jī),進(jìn)程最多適合多核(不同火車可以開(kāi)在多個(gè)軌道上,同一火車的車廂不能在行進(jìn)的不同的軌道上)
- 進(jìn)程使用的內(nèi)存地址可以上鎖,即一個(gè)線程使用某些共享內(nèi)存時(shí),其他線程必須等它結(jié)束,才能使用這一塊內(nèi)存。(比如火車上的洗手間)-”互斥鎖(mutex)”
- 進(jìn)程使用的內(nèi)存地址可以限定使用量(比如火車上的餐廳,最多只允許多少人進(jìn)入,如果滿了需要在門(mén)口等,等有人出來(lái)了才能進(jìn)去)-“信號(hào)量(semaphore)”
3、多進(jìn)程與多線程的概念與區(qū)別
(1)一個(gè)進(jìn)程相當(dāng)于一個(gè)要執(zhí)行的程序,它會(huì)開(kāi)啟一個(gè)主線程,多線程會(huì)開(kāi)啟多個(gè)子線程;
(2)python設(shè)計(jì)之初沒(méi)有多核CPU,所以它的多線程是一種并發(fā)操作(偽并行),它相當(dāng)于把CPU的時(shí)間片分成一段一段很小的片段,然后分給各個(gè)線程交替進(jìn)行,由于每個(gè)片段都很短,所以看上去像平行操作;
舉個(gè)例子:現(xiàn)在有一個(gè)16核的CPU,一個(gè)要執(zhí)行的數(shù)據(jù)讀取任務(wù)A,我們將A分成多個(gè)進(jìn)程并行操作,每個(gè)進(jìn)程放到一個(gè)核上;但是如果將這個(gè)任務(wù)A用一個(gè)進(jìn)程(開(kāi)多個(gè)線程)完成的話,雖然一個(gè)核心同一時(shí)間處理一個(gè)線程,按理說(shuō)16核可以同時(shí)處理16個(gè)線程(未考慮超線程技術(shù)),但由于python的缺陷,這里面的多線程依然是并發(fā)(偽并行)的,所以效率低;
?
二、多進(jìn)程與多線程的實(shí)例
三、附錄
(1)菜鳥(niǎo)教程:Python3 多線程 | 菜鳥(niǎo)教程
(2)【python】專題八.多線程之thread和threading:
?[python學(xué)習(xí)] 專題八.多線程編程之thread和threading_Eastmount的博客-CSDN博客
(3)使用多線程實(shí)例實(shí)講:python使用多線程實(shí)例講解_sqc157400661的博客-CSDN博客_python多線程實(shí)例
(4)python線程指南:Python線程指南 - AstralWind - 博客園
(5)python并發(fā)編程實(shí)例:https://www.jb51.net/article/51953.htm
(6)使用python進(jìn)行并發(fā)編程:http://python.jobbole.com/81255/
(7)python——并發(fā)編程:python基礎(chǔ)——并發(fā)編程_Jorocco的博客-CSDN博客_python并發(fā)編程
(8)python并發(fā)編程——線程:詳細(xì)網(wǎng)址
總結(jié)
以上是生活随笔為你收集整理的Python——多线程与多进程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 5分钟完成核磁共振检查,Facebook
- 下一篇: 攻防世界-web- easyphp