進程線程區別以及通信方式淺易分析

進程:
創建進程相當於自我拷貝一塊虛擬內存區域,如果有進程A、B、C、D四個3G大小虛擬內存空間,而實際上運行內存只有2G,看起來幾個進程同時處理事件運行,這點內存不夠用,但實際上內存開闢成幾個區域,讓各個進程一部分虛擬內存運行在內存中,然後輪詢。
linux系統的CPU相當於一個很大的鏈表,處理各種各進程,給它發送指令,處理指令,這個CPU在不斷地遍歷鏈表,然後給與要執行的進程一個時間片讓它運行。

多線程實際上還是在一個進程中,所以線程之間相互通信可以直接訪問該進程的資源,最簡單地如全局變量。

而進程相互通信,因爲運行不同的內存上,所以不可以直接通信,纔有了後面的通信方式。
1.有名管道
通過管道文件進行對通信,此時只能有親緣關係的進程才能相互通信。
2.無名管道
顧名思義,沒有名字,那麼所有進程都可以訪問。
3.信號
信號相當於給CPU發送請求,信號的種類是有限的,可以通過kill -l查看,給CPU發送請求對其他進程進行處理。實際上不是相互通信,而可以看作向操作系統告狀,或者通知什麼事情。

system V 新加的功能
4.消息隊列
這個可以看作是管道的升級版本,管道類似與在食堂排隊的學生,不可以因爲誰的成績好壞而優先打飯。消息隊列就如同去銀行辦理業務的客戶,當你存款夠多,能夠讓銀行知道你對他們很重要就會優先讓你辦理業務。消息隊列就是這樣,它加入了一個對應的ID,其他進程可以根據ID來選擇性通信。
5.信號量
有了量這個字在裏面以後,讀取消息都要看看量,其實就是數量,你要有量才能操作,否則休眠。
6.共享內存
這個是進程間通信效率最高的方式,怎麼說呢,就相當把實際運行的內存映射到同一個內存中,既然都在同一內存,那麼相互通信就簡簡單單了
7.套接字

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章