1. 程式人生 > >linux下幾種IPC通行方式比較

linux下幾種IPC通行方式比較

linux上面的IPC大多都是從UNIX上面繼承而來。         最初Unix IPC包括:管道、FIFO、訊號。System V IPC包括:System V訊息佇列、System V訊號燈、System V共享記憶體區。由於Unix版本的多樣性,電子電氣工程協會(IEEE)開發了一個獨立的Unix標準,這個新的ANSI Unix標準被稱為計算機環境的可移植性作業系統介面(PSOIX)。現有大部分Unix和流行版本都是遵循POSIX標準的,而Linux從一開始就遵循POSIX標準。Posix IPC包括: Posix訊息佇列、Posix訊號燈、Posix共享記憶體區。 所以目前linux上面支援的IPC主要包括四類:
1. UNIX早期IPC:管道、FIFO、訊號; 2. system V IPC:System V訊息佇列、System V訊號燈、System V共享記憶體區; 3. Posix IPC: Posix訊息佇列、Posix訊號燈、Posix共享記憶體區; 4. 基於socket的IPC;         我們這一系列沒有講述訊號燈相關內容,是因為訊號燈是程序間以及同一程序不同執行緒之間的一種同步方式,我們這一系列把精力主要放在程序之間資訊的互動上面,而同步與互斥的內容放在另一個系列,這樣更便於知識的細化歸類,各個擊破。其實同步與互斥是程序間通訊的一個很重要的內容,所以我們會立即在下一個系列詳細講解同步與互斥的內容。
下面分析一下我們這一系列文章各種IPC的特點:
1. socket         a、使用socket通訊的方式實現起來簡單,可以使用因特網域和UNIX域來實現,使用因特網域可以實現不同主機之間的進出通訊。         b、該方式自身攜帶同步機制,不需要額外的方式來輔助實現同步。         c、隨程序持續。
2. 共享記憶體         a、最快的一種通訊方式,多個程序可同時訪問同一片記憶體空間,相對其他方式來說具有更少的資料拷貝,效率較高。         b、需要結合訊號燈或其他方式來實現多個程序間同步,自身不具備同步機制。         c、隨核心持續,相比於隨程序持續生命力更強。
3. 管道         a、較早的一種通訊方式,缺點明顯:只能用於有親緣關係程序之間的通訊;只支援單向資料流,如果要雙向通訊需要多建立一個管道來實現。         b、自身具備同步機制。         c、隨程序持續。 4. FIFO         a、是有名管道,所以支援沒有親緣關係的程序通訊。和共享記憶體類似,提供一個路徑名字將各個無親緣關係的程序關聯起來。但是也需要建立兩個描述符來實現雙向通訊。         b、自身具備同步機制。         c、隨程序持續。
5. 訊號         a、這種通訊可攜帶的資訊極少。不適合需要經常攜帶資料的通訊。         b、不具備同步機制,類似於中斷,什麼時候產生訊號,程序是不知道的。 6. 訊息佇列         a、與共享記憶體和FIFO類似,使用一個路徑名來實現各個無親緣關係程序之間的通訊。訊息佇列相比於其他方式有很多優點:它提供有格式的位元組流,減少了開發人員的工作量;訊息具有型別(system V)或優先順序(posix)。其他方式都沒有這些優點。         b、具備同步機制。         c、隨核心持續。 這個系列就這樣完了,時間倉促,做程式設計師的苦逼日子時間就是那麼的有限,分析不是特別深入,淺嘗輒止而已,也難免有所錯誤。期待下一個同步與互斥系列。。。。。。

相關推薦

linuxIPC通行方式比較

linux上面的IPC大多都是從UNIX上面繼承而來。         最初Unix IPC包括:管道、FIFO、訊號。System V IPC包括:System V訊息佇列、System V訊號燈、System V共享記憶體區。由於Unix版本的多樣性,電子電氣工程協會(

Linux文件傳輸命令

其他 對待 的人 spa quit 配置 delete compute 服務器 Linux下幾種文件傳輸命令 sz rz sftp scp 最近在部署系統時接觸了一些文件傳輸命令,分別做一下簡單記錄: 1.sftp Secure Ftp 是一個基於SSH安全協議的文件傳輸管

SQL Server中遍歷方式比較

不同 .com font size 常用 分享 分享圖片 遊標 inf SQL遍歷解析   在SQL的存儲過程,函數中,經常需要使用遍歷(遍歷table),其中遊標、臨時表等遍歷方法很常用。面對小數據量,這幾種遍歷方法均可行,但是面臨大數據量時,就需要擇優選擇,不同的遍歷方

linux常用的文本處理工具

支持 字符數 windows head 連續 ech str 有用 alt 1.幾種常見的文本處理命令 1.catcat我們在早期的學習中最常見的命令之一,但我們用到的只是cat命令本身,如cat /etc/passwd,查看/etc/passwd 的內容,沒有用到cat的

Linux檔案傳輸命令

  Linux下幾種檔案傳輸命令 sz rz sftp scp     最近在部署系統時接觸了一些檔案傳輸命令,分別做一下簡單記錄: 1.sftp Secure Ftp 是一個基於SSH安全協議的檔案傳輸管理工具。由於它是基於SSH的,會在

MySQL5.6建索引方式比較

mysql> select version(); +-----------+ | version() | +-----------+ | 5.6.17    | +-----------+ mysql> CREATE TABLE test AS SELECT *

Hbase資料入庫方式比較

import java.io.IOException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configurati

Redhat_CentOS軟體安裝方式

 1.rpm RPM  RedHat Package Manager(RedHat軟體包管理工具)的縮寫,這一檔案格式名稱雖然打上了RedHat的標誌,  但是其原始設計理念是開放式的,現在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的

JS遍歷方式比較

數組 不能 left fff 支持 clas ffffff padding for in 幾種遍歷方式比較 for of 循環不僅支持數組、大多數偽數組對象,也支持字符串遍歷,此外還支持 Map 和 Set 對象遍歷。 for in 循環可以遍歷字符串、

linux3JDK配置方式

 需要配置的環境變數  1. PATH環境變數。作用是指定命令搜尋路徑,在shell下面執行命令時,它會到PATH變數所指定的路徑中查詢看是否能找到相應的命令程式。我們需要把 jdk安裝目錄下的bin目錄增加到現有的PATH變數中,bin目錄中包含經常要用到的可執行檔案如j

std::vector的遍歷方式比較

std::vector是我在標準庫中實用最頻繁的容器。總結一下在遍歷和建立vector時需要注意的一些地方。         在不考慮執行緒安全問題的前提下,在C++11中有五種遍歷方式。 方式一 for (size_t i =0; i < vec.size(); i

java指定編碼的按行讀寫txt檔案(讀寫方式比較

輸入輸出的幾種形式 1.FileReader,FileWriter File r = new File("temp.txt") FileReader f = new FileReader(name);//讀取檔案name BufferedReader b = new Buf

python開啟檔案的方式(你習慣的不一定是最好的)

昨天看完了這本python進階,感覺這本書對我啟發很大,做了三張紙的筆記,方便我在遇到問題的時候翻閱,然後尋找可能的解決方案。作為一個使用python一年的小白,雖然說不是小白,但是這一年來基本上是用什麼學什麼,對python沒有系統的學習過,900多頁的厚

建立執行緒有不同的方式?哪一比較受歡迎?為什麼?

有三種方式: ①繼承Thread類(真正意義上的執行緒類),是Runnable介面的實現。 ②實現Runnable介面,並重寫裡面的run方法。 ③使用Executor框架建立執行緒池。Executor框架是juc裡提供的執行緒池的實現。呼叫執行緒的start():啟動此執行緒;呼叫相應的r

Linux方式安裝apache伺服器踩過的坑

記得第一次找工作面試時,面試官問:你如何理解apache?對於一個只在tomcat上開發剛入行的程式設計師,我只記得apache是一個開源組織,下面掌管著各種高大上,聽都沒聽過的專案,面試完後我才知道他想問的是apache伺服器,而且後面肯定還有和apache伺服器相關的提問,就這樣被我

組合語言入門:定址方式比較

考慮到上一章的“定址方式”太重要了,遂單獨成章,作文於此 直接定址 適用於偏移地址為[idata]的情形 CS: IP存放程式碼指標(2000: 000E) 地址加法器合成C

Linux 方式設定環境變數

一、環境變數檔案介紹 轉自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中環境變數包括系統級和使用者級,系統級的環境變數是每個登入到系統的使用者都要讀取的系統變數,而使用者級的環境變數則是該使用者使用系統時載入的環境變數。 所以管理環

GoLang讀檔案方式比較

    GoLang提供了很多讀檔案的方式,一般來說常用的有三種。使用Read加上buffer,使用bufio庫和ioutil 庫。 那他們的效率如何呢?用一個簡單的程式來評測一下: Go程式碼   package main  import(      "fmt"

Linux提權————Linux不同方式的提權技巧

在滲透測試或者漏洞評估的過程中,提權是非常重要的一步,在這一步,黑客和安全研究人員常常通過exploit,bug,錯誤配置來提升許可權。本文的例子都是在虛擬機器裡測試的,不同的虛擬機器可以從Vulnhub下載。實驗一:利用Linux核心漏洞提權VulnOS version 2

linuxselect/poll/epoll機制的比較

解決方案 socket 下一步 linux 操作系統 select、poll、epoll簡介epoll跟select都能提供多路I/O復用的解決方案。在現在的Linux內核裏有都能夠支持,其中epoll是Linux所特有,而select則應該是POSIX所規定,一般操作系統均有實現sele