Python多線程與多進程那個好
發布時間:2022-11-19 17:19:21 已幫助:人
多進程和多線程是操作系統嘴最抽象的概念之一,因為比較難懂,所以很多小伙伴不知道他們的優劣勢在哪里,下面小編就給大家細細的聊一下Python多線程與多進程各自的特點,讓大家對這個理解更深刻。
一,線程與進程的區別可以歸納為以下4點:
地址空間和其它資源(如打開文件):進程間相互獨立,同一進程的各線程間共享。某進程內的線程在其它進程不可見。
通信:進程間通信IPC,線程間可以直接讀寫進程數據段(如全局變量)來進行通信——需要進程同步和互斥手段的輔助,以數據的一致性。
調度和切換:線程上下文切換比進程上下文切換要快得多。
在多線程OS中,進程不是一個可執行的實體。
二,多進程和多線程的比較
對比維度
數據共享、同步;內存、CPU;創建、銷毀、切換;編程、調試;可靠性;分布式。
多進程
數據共享復雜,同步簡單;占用內存多;切換復雜;CPU利用率低;復雜,速度慢;編程簡單,調試簡單;進程間不會互相影響;適用于多核、多機,擴展到多臺機器簡單。
多線程
數據共享簡單,同步復雜;占用內存少,切換簡單,CPU利用率高;簡單,速度快;編程復雜,調試復雜;一個線程掛掉將導致整個進程掛掉;適合于多核。
在數據共享、同步上,兩種各有優劣。在內存、CPU;創建、銷毀、切換方面線程更有優勢,在編程、調試;可靠性;分布式則進程更有優勢。
三,總結,進程和線程還可以類比為火車和車廂:
線程在進程下行進(單純的車廂無法運行)
一個進程可以包含多個線程(一輛火車可以有多個車廂)
不同進程間數據很難共享(一輛火車上的乘客很難換到另外一輛火車,比如站點換乘)
同一進程下不同線程間數據很易共享(A車廂換到B車廂很容易)
進程要比線程消耗更多的計算機資源(采用多列火車相比多個車廂更耗資源)
進程間不會相互影響,一個線程掛掉將導致整個進程掛掉(一列火車不會影響到另外一列火車,但是如果一列火車上中間的一節車廂著火了,將影響到該趟火車的所有車廂)
進程可以拓展到多機,進程最多適合多核(不同火車可以開在多個軌道上,同一火車的車廂不能在行進的不同的軌道上)
進程使用的內存地址可以上鎖,即一個線程使用某些共享內存時,其他線程必須等它結束,才能使用這一塊內存。(比如火車上的洗手間)-”互斥鎖(mutex)”
進程使用的內存地址可以限定使用量(比如火車上的餐廳,最多只允許多少人進入,如果滿了需要在門口等,等有人出來了才能進去)-“信號量(semaphore)”。