1. 程式人生 > >併發程式設計(5)-管道、資料共享、程序池

併發程式設計(5)-管道、資料共享、程序池

概要:

    1.管道:Pipe()  也是IPC通訊的一種,

    2.資料共享:Manager()

    3.程序池:Pool()

    4.訊號量和程序池的區別

一.管道:Pipe() 

 IPC通訊機制:IPC是intent-Process Communication的縮寫,含義為程序間通訊或者跨程序通訊,是指兩個程序之間進行資料交換的過程。IPC不是某個系統所獨有的,任何一個作業系統都需要有相應的IPC機制.上篇寫的"佇列"就是ipc通訊,本節再介紹一篇ipc通訊:管道

建立管道的類: Pipe():

Pipe():在程序之前建立一條管道,並返回元組(conn1,conn2),其中conn1,conn2表示管道兩端的連線物件,強調一點:必須在產生Process物件之前產生管道(預設管道是全雙工的,如果括號內寫False,conn1只能用於接收,conn2只能用於傳送。)

二.資料共享:Manager()

程序間應該儘量避免通訊,即便需要通訊,也應該選擇程序安全的工具來避免加鎖帶來的問題,應該儘量避免使用本節所講的共享資料的方式,以後我們會嘗試使用資料庫來解決程序之間的資料共享問題。

多程序共同去處理共享資料的時候,就和我們多程序同時去操作一個檔案中的資料是一樣的,不加鎖就會出現錯誤的結果,程序不安全的,所以也需要加鎖

三.程序池:Pool()  

系統不能無限的開程序,開啟或者關閉程序都需要消耗時間,即便你開啟了很多,系統也不會讓他們同時執行,這樣反而影響程式的效率,那怎麼解決呢,引出程序池的概念.最常用的就是開程序池,

  概念: 

定義一個池子,在裡面放上固定數量的程序,有需求來了,就拿一個池中的程序來處理任務,等到處理完畢,程序並不關閉,而是將程序再放回程序池中繼續等待任務。如果有很多工需要執行,池中的程序數量不夠,任務就要等待之前的程序執行任務完畢歸來,拿到空閒程序才能繼續執行。也就是說,池中程序的數量是固定的,那麼同一時間最多有固定數量的程序在執行。這樣不會增加作業系統的排程難度,還節省了開閉程序的時間,也一定程度上能夠實現併發效果

四.訊號量和程序池的區別

  程序池是多個需要被執行的任務在程序池外面排隊等待獲取程序物件去執行自己,而訊號量是一堆程序等待著去執行一段邏輯程式碼。

  訊號量,裡面有鎖,不能控制建立多少個程序,但是可以控制同時多少個程序能夠執行,但是程序池能控制你可以建立多少個程序。

  舉例:就像那些開大車拉煤的,訊號量是什麼呢,就好比我只有五個車道,你每次只能過5輛車,但是不影響你建立100輛車,但是程序池相當於什麼呢?相當於你只有5輛車,每次5個車拉東西,拉完你再把車放回來,給別的人拉煤用

詳情:https://mp.weixin.qq.com/s/CLezo3fMFytNZF_w05oImw