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