進程間的通訊(IPC)方式

內存映射

為什么要進行進程間的通訊(IPC (Inter-process communication))

數據傳輸:一個進程需要將它的數據發送給另一個進程,發送的數據量在一個字節到幾M字節之間
共享數據:多個進程想要操作共享數據,一個進程對共享數據的修改,別的進程應該立刻看到。
通知事件:一個進程需要向另一個或一組進程發送消息,通知它(它們)發生了某種事件(如進程終止時要通知父進程)。
資源共享:多個進程之間共享同樣的資源。為了作到這一點,需要內核提供鎖和同步機制。
進程控制:有些進程希望完全控制另一個進程的執行(如Debug進程),此時控制進程希望能夠攔截另一個進程的所有陷入和異常,并能夠及時知道它的狀態改變。

linux常用的進程間的通訊方式

(1)、管道(pipe):管道可用于具有親緣關系的進程間的通信,是一種半雙工的方式,數據只能單向流動,允許一個進程和另一個與它有共同祖先的進程之間進行通信。

(2)、命名管道(named pipe):命名管道克服了管道沒有名字的限制,同時除了具有管道的功能外(也是半雙工),它還允許無親緣關系進程間的通信。命名管道在文件系統中有對應的文件名。命名管道通過命令mkfifo或系統調用mkfifo來創建。

(3)、信號(signal):信號是比較復雜的通信方式,用于通知接收進程有某種事件發生了,除了進程間通信外,進程還可以發送信號給進程本身;linux除了支持Unix早期信號語義函數sigal外,還支持語義符合Posix.1標準的信號函數sigaction(實際上,該函數是基于BSD的,BSD為了實現可靠信號機制,又能夠統一對外接口,用sigaction函數重新實現了signal函數)。

(4)、消息隊列:消息隊列是消息的鏈接表,包括Posix消息隊列system V消息隊列。有足夠權限的進程可以向隊列中添加消息,被賦予讀權限的進程則可以讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節流以及緩沖區大小受限等缺

(5)、共享內存:使得多個進程可以訪問同一塊內存空間,是最快的可用IPC形式。是針對其他通信機制運行效率較低而設計的。往往與其它通信機制,如信號量結合使用,來達到進程間的同步及互斥。

(6)、內存映射:內存映射允許任何多個進程間通信,每一個使用該機制的進程通過把一個共享的文件映射到自己的進程地址空間來實現它。

(7)、信號量(semaphore):主要作為進程間以及同一進程不同線程之間的同步手段。

(8)、套接字(Socket):更為一般的進程間通信機制,可用于不同機器之間的進程間通信。起初是由Unix系統的BSD分支開發出來的,但現在一般可以移植到其它類Unix系統上:Linux和System V的變種都支持套接字。

轉載于:https://www.cnblogs.com/jiangzhaowei/p/5558756.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395823.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395823.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開發人員避免編寫測試的2個最常見原因

This post was originally published on Medium這篇文章最初發表于Medium Writing tests represents one of those few stages of software development that is usually overlooked, even though it may be one of the most important one. Developers mention it and usuall…

java ews_Java---使用EWS 寫個ExchangeMailUtil

依賴包:commons-httpclient-3.1.jarcommons-codec-1.10.jarcommons-logging-1.2.jarjcifs-1.3.17.jar代碼示例:創建MailBean類:import java.util.Date;public class MailBean {public BigDecimal getId() {return id;}public void setId(BigD…

Ilya Muromets(DP or 思維)

Ilya Muromets Gym - 100513F Силачом слыву недаром — семерых одним ударом!From the Russian cartoon on the German fairy tale.Ilya Muromets is a legendary bogatyr. Right now he is struggling against Zmej Gorynych, a drago…

C# 裝箱和拆箱

C#的值類型可以分為在棧上分配內存的值類型和在托管堆上分配內存的引用類型。 1、那么值類型和引用類型能否相互轉換呢? 答案是肯定的,C#通過裝箱和拆箱來實現兩者的相互轉換。 (1)、裝箱 ---把值類型強制轉換成引用類型(object類型) (2)、拆箱 ---把引用類型強制轉換成值…

第五章

學會了開發板測試環境的調試和燒寫android系統。 學到的知識: 一、安裝串口調試工具:minicom 第1步:檢測當前系統是否支持USB轉串口。 # lsmod | grep usbserial 第2步:安裝minicom # qpt-get install minicom 第3步:配置minicom # minicom -…

Angular的后院:組件依賴關系的解決

by Dor Moshe通過Dor Moshe Angular的后院:解決 組件依賴關系 (Angular’s Backyard: The Resolving of Components Dependencies) This article originally appeared on dormoshe.io這篇文章 最初出現在dormoshe.io Many of us use the Hierarchical Dependenc…

node中的Stream-Readable和Writeable解讀

在node中,只要涉及到文件IO的場景一般都會涉及到一個類-Stream。Stream是對IO設備的抽象表示,其在JAVA中也有涉及,主要體現在四個類-InputStream、Reader、OutputStream、Writer,其中InputStream和OutputSt…

新Rider預覽版發布,對F#的支持是亮點

JetBrains一直在改進自己的跨平臺.NET IDE產品Rider,努力使其成為Visual Studio家族產品可承擔職能的重要替代者。于今年四月發布的Rider預覽版(EAP 21)提供了一些新特性,其中的亮點在于對函數式編程語言F#的支持。\\鑒于這是Ride…

java代碼整合_java合并多個文件的實例代碼

在實際項目中,在處理較大的文件時,常常將文件拆分為多個子文件進行處理,最后再合并這些子文件。下面就為各位介紹下Java中合并多個文件的方法。Java中合并子文件最容易想到的就是利用BufferedStream進行讀寫。具體的實現方式如下,…

正則表達式的一些規則

1.限定修飾符只對其緊前的元字符有效 String rex8 "\\d\\D"; 上式中,只對\\D有效,即有至少有1個(1個或多個)非數字,\\d仍然只許有一個數字。 2.[1,2,3]和[123]是一樣的轉載于:https://www.cnblogs.com/Sabr…

2016版單詞的減法_在2016年最大的電影中,女性只說了27%的單詞。

2016版單詞的減法by Amber Thomas通過琥珀托馬斯 在2016年最大的電影中,女性只說了27%的單詞。 (Women only said 27% of the words in 2016’s biggest movies.) Movie trailers in 2016 promised viewers so many strong female characters. Jyn Erso…

軟件工程博客---團隊項目---個人設計2(算法)

針對分析我們團隊項目的需求,我們選定Dijkstra算法。 算法的基本思想: Dijkstra算法是由E.W.Dijkstra于1959年提出,又叫迪杰斯特拉算法,它應用了貪心算法模式,是目前公認的最好的求解最短路徑的方法。算法解決的是有向…

UWP 雜記

UWP用選取文件對話框 http://blog.csdn.net/u011033906/article/details/65448394 文件選取器、獲取文件屬性、寫入和讀取、保存讀取和刪除應用數據 https://yq.aliyun.com/articles/839 UWP判斷文件是否存在 http://blog.csdn.net/lindexi_gd/article/details/51387901…

微信上傳素材 java_微信素材上傳(JAVA)

public String uploadMaterial(String url,InputStream sbs,String filelength,String filename, String type) throws Exception {try {DataInputStream innew DataInputStream(sbs);url url.replace("TYPE", type);URL urlObj new URL(url);// 創建Http連接HttpU…

SQL Server讀寫分離之發布訂閱

一、發布 上面有多種發布方式,這里我選擇事物發布,具體區別請自行百度。 點擊下一步、然后繼續選擇需要發布的對象。 如果需要篩選發布的數據點擊添加。 根據自己的計劃選擇發布的時間。 點擊安全設置,設置代理信息。 最后單擊完成系統會自動…

碼農和程序員的幾個重要區別!

如果一個企業老板大聲嚷嚷說,“我要招個程序員”,那么十之八九指的是“碼農”——一種純粹為了錢而寫代碼的技術人員。這其實是一種非常狹隘和錯誤的做法,原因么,且聽我一一道來。1、碼農寫代碼,程序員寫系統從本質上講…

sql server2008禁用遠程連接

1.打開SQL Server 配置管理器,雙擊左邊 SQL Server 網絡配置,點擊TCP/IP協議,在協議一欄中,找到 全部偵聽,修改為否,然后點擊IP地址,將IP地址為127.0.0.1(IPV4)或::1(IPV6)的已啟用修改為是,其它的IP地址的已啟用修改為否 注意:如…

snapchat注冊不到_從Snapchat獲得開發人員職位中學到的經驗教訓

snapchat注冊不到Here are three links worth your time:這是三個值得您花費時間的鏈接: I just got a developer job at Snapchat. Here’s what I learned and how it can help you with your job search (15 minute read) 我剛剛在Snapchat獲得開發人員職位。 這…

java bitmap jar_Java面試中常用的BitMap代碼

引言阿里內推面試的時候被考了一道編程題:10億個范圍為1~2048的整數,將其去重并計算數字數目。我看到這個題目就想起來了《編程珠璣》第一章講的叫做BitMap的數據結構,但是我并沒有在java上實現過,這就比較尷尬了,再加…

移動端工程架構與后端工程架構的思想摩擦之旅(1)

此文已由作者黎星授權網易云社區發布。歡迎訪問網易云社區,了解更多網易技術產品運營經驗記資源投放后端工程的架構調整與優化 架構思考一直以來對軟件工程架構有著極大的興趣,無論是之前負責的移動端Android工程,亦或是現在轉到后端開發后維…