程序間互動的幾種方式
程序間通訊就是在不同程序之間傳播或交換資訊,那麼不同程序之間存在著什麼雙方都可以訪問的介質呢?程序的使用者空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享記憶體區。但是,系統空間卻是“公共場所”,所以核心顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪問的外設了。在這個意義上,兩個程序當然也可以通過磁碟上的普通檔案交換資訊,或者通過“登錄檔”或其它資料庫中的某些表項和記錄交換資訊。廣義上這也是程序間通訊的手段,但是一般都不把這算作“程序間通訊”。因為那些通訊手段的效率太低了,而人們對程序間通訊的要求是要有一定的實時性。
程序間通訊主要包括管道, 系統IPC(包括訊息佇列,訊號量,共享儲存), SOCKET.
管道包括三種:1)普通管道PIPE, 通常有種限制,一是半雙工,只能單向傳輸;二是隻能在父子程序間使用. 2)流管道s_pipe: 去除了第一種限制,可以雙向傳輸. 3)命名管道:name_pipe, 去除了第二種限制,可以在許多並不相關的程序之間進行通訊.
系統IPC的三種方式類同,都是使用了核心裡的識別符號來識別.
管道( pipe ):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。
# 有名管道 (named pipe) : 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。 # 訊號量( semophore ) : 訊號量是一個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。 # 訊息佇列( message queue ) : 訊息佇列是由訊息的連結串列,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。 # 訊號 ( sinal ) : 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。 # 共享記憶體( shared memory ) :共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由一個程序建立,但多個程序都可以訪問。共享記憶體是最快的 IPC 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號兩,配合使用,來實現程序間的同步和通訊。 # 套接字( socket ) : 套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同及其間的程序通訊。
FAQ1: 管道與檔案描述符,檔案指標的關係?
答: 其實管道的使用方法與檔案類似,都能使用read,write,open等普通IO函式. 管道描述符來類似於檔案描述符. 事實上, 管道使用的描述符, 檔案指標和檔案描述符最終都會轉化成系統中SOCKET描述符. 都受到系統核心中SOCKET描述符的限制. 本質上LINUX核心原始碼中管道是通過空檔案來實現.
FAQ2: 管道的使用方法?
答: 主要有下面幾種方法: 1)pipe, 建立一個管道,返回2個管道描述符.通常用於父子程序之間通訊. 2)popen, pclose: 這種方式只返回一個管道描述符,常用於通訊另一方是stdin or stdout; 3)mkpipe: 命名管道, 在許多程序之間進行互動.
FAQ3: 管道與系統IPC之間的優劣比較?
答: 管道: 優點是所有的UNIX實現都支援, 並且在最後一個訪問管道的程序終止後,管道就被完全刪除;缺陷是管道只允許單向傳輸或者用於父子程序之間.
系統IPC: 優點是功能強大,能在毫不相關程序之間進行通訊; 缺陷是關鍵字KEY_T使用了核心標識,佔用了核心資源,而且只能被顯式刪除,而且不能使用SOCKET的一些機制,例如select,epoll等.
FAQ4: WINDOS程序間通訊與LINUX程序間通訊的關係?
答: 事實上,WINDOS的程序通訊大部分移植於UNIX, WINDOS的剪貼簿,檔案對映等都可從UNIX程序通訊的共享儲存中找到影子.
FAQ5: 程序間通訊與執行緒間通訊之間的關係?
答: 因為WINDOWS執行的實體是執行緒, 狹義上的程序間通訊其實是指分屬於不同程序的執行緒之間的通訊.而單個程序之間的執行緒同步問題可歸併為一種特殊的程序通訊.它要用到核心支援的系統呼叫來保持執行緒之間同步. 通常用到的一些執行緒同步方法包括:Event, Mutex, 訊號量Semaphore, 臨界區資源等.
摘自:http://blog.csdn.net/yufaw/article/details/7409596</span>
相關推薦
Android程序間通訊 - 幾種方式的對比總結
什麼是RPC RPC(Remote Procedure Call)即遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,在不需要了解底層網路技術的協議下,即可獲取計算機程序中的資料。RPC使得開發包括網路分散式多程式在內的應用程式更加容易。 RPC在OSI網路通訊7層模型中
Android activity間通訊幾種方式
read flag 進程 destroy ads sage on() sting ogl Activity 通訊 Bundle 我們可以通過將數據封裝在Bundle對象中 ,然後在Intent跳轉的時候攜帶Bundle對象 bundle 本質上是使用 arrayMap實現
Android 程序間通訊四種方式
android系統中應用程式之間不能共享記憶體,在android SDK中提供了4種用於跨程序通訊的方式。這4種方式正好對應於android系統中4種應用程式元件:Activity、Content Provider、Broadcast和Service。 1、A
程序間互動的幾種方式
程序間通訊就是在不同程序之間傳播或交換資訊,那麼不同程序之間存在著什麼雙方都可以訪問的介質呢?程序的使用者空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享記憶體區。但是,系統空間卻是“公共場所”,所以核心顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪問的外
Linux程序間通訊IPC的幾種方式簡介
Linux程序通訊的源頭 linux下的程序通訊手段基本上是從Unix平臺上的程序通訊手段繼承而來的。而對Unix發展做出重大貢獻的兩大主力AT&T(原為American Telephone & Tele
程序間通訊的幾種方式的介紹及比較
程序間通訊 就是在不同程序之間傳播或交換資訊,那麼不同程序之間存在著什麼雙方都可以訪問的介質呢?程序的使用者空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享記憶體區。但是,系統空間卻是“公共場所”,所以核心顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪問的外設了。在這個意義上,兩個
程序、執行緒間的幾種通訊方式
一、程序通訊 幾種程序間的通訊方式 (1) 管道(pipe):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有血緣關係的程序間使用。程序的血緣關係通常指父子程序關係。 (2)有名管道(named pipe):有名管道也是半雙工的通訊方式,但是它允許無
Android程序間通訊的幾種方式
定義多程序 Android應用中使用多程序只有一個辦法(用NDK的fork來做除外),就是在AndroidManifest.xml中宣告元件時,用android:process屬性來指定。 不知定process屬性,則預設執行在主程序中,主程序名字為包名。 andr
Windows程序間共享核心物件幾種方式
核心物件的控制代碼是程序相關的,這樣更可靠,更安全;Windows提供下列N種機制來允許程序共享核心物件。 使用物件控制代碼繼承 只有程序間存在父子關係才能使用物件控制代碼繼承;系統會遍歷父程序的控制代碼表將所有有效的控制代碼完整的複製到子程序的控制代碼表中(這
使用者程序間通訊主要哪幾種方式?
(1)管道(Pipe):管道可用於具有親緣關係程序間的通訊,允許一個程序和另一個與它有共同祖先的程序之間進行通訊。(2)命名管道(named pipe):命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。命名管道在檔案系統中有對應的檔名。命名管道通過命令mkfi
使用者程序間通訊主要有哪幾種方式?
(1)管道(Pipe):管道可用於具有親緣關係程序間的通訊,允許一個程序和另一個與它有共同祖先的程序之間進行通訊。 (2)命名管道(named pipe):命名管道克服了管道沒有名字的限制,因此,除具
Linux程序間通訊的幾種方式總結-概述
《鳥哥的私房菜-基礎篇和伺服器架構篇》 程序通訊的目的 資料傳輸 一個程序需要將它的資料傳送給另一個程序,傳送的資料量在一個位元組到幾M位元組之間 共享資料 多個程序想要操作共享資料,一個程序對共享資料 通知事 一個程序需要向另一個或一組程序傳送訊息,
Linux程序間通訊的幾種方式總結--linux核心剖析(七)
程序間通訊概述 程序通訊的目的 資料傳輸 一個程序需要將它的資料傳送給另一個程序,傳送的資料量在一個位元組到幾M位元組之間 共享資料 多個程序想要操作共享資料,一個程序對共享資料 通知事 一個程序需要向另一個或一組程序傳送訊息,通知它(它
程序間通訊(IPC)的幾種方式
程序間的通訊方式大體來說可分為兩種,如圖示: 下面分別簡單介紹這8種通訊方式: 無名管道( pipe ):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序
Android線程間通訊的幾種方式
not asynctask gen andro ttext eth pub nbsp delayed 1.runOnUiThread(Runnable) 在子線程中直接使用該方法,可以更新UI runOnUiThread(new Runnable
Linux進程間通信的幾種方式總結--linux內核剖析(七)
字節流 標準 包含 down pro trac posix共享內存 ++ 實現 進程間通信概述 進程通信的目的 傳輸數據 一個進程須要將它的數據發送給還有一個進程。發送的數據量在一個字節到幾M字節之間 共享數據 多個進程想要操作共享
c# WinFo判斷當前程序是否已經啟動或存在的幾種方式
UC 初始 檢測 geb 是否 ren 返回 inf nvi 第一種方式:利用Mutex互斥量實現同時只有一個進程實例在運行 static class Program { /// <summary>
小程序頁面傳值的幾種方式
get 頁面傳值 targe eve url傳值 () pre itl 存取 1. url傳值 list.wxml: <view class="playIcon"> <image src="../../iconfont/play_ini
Linux進程間通信的幾種方式
控制進程 ces linux進程 proc 都是 緩沖 地址 進程 機制 一、進程間通信的目的 數據傳輸:一個進程需要將它的數據發送給另一個進程,發送的數據量在一個字節到幾M字節之間 共享數據:多個進程要操作共享數據,一個進程對共享數據 信息傳遞:一個進程需要向另
React 中組件間通信的幾種方式
沒有 emit ack cto const fault listener exp 組件通信 在使用 React 的過程中,不可避免的需要組件間進行消息傳遞(通信),組件間通信大體有下面幾種情況: 父組件向子組件通信 子組件向父組件通信 非嵌套組件間通信 跨級組件之間通信