1. 程式人生 > >Java面試--程序間的通訊方式

Java面試--程序間的通訊方式

面試題:程序間的通訊方式(VIVO、阿里巴巴面試題)
面試題:程序通訊方式有哪些,問我分別怎麼使用,管道有哪些型別,各有什麼優缺點。(百度面試題)

一、程序通訊的目的

1、資料傳輸
一個程序需要將它的資料傳送給另一個程序。
2、資源共享
多個程序之間共享同樣的資源。
3、通知事件
一個程序需要向另一個或一組程序傳送訊息,通知它(它們)發生了某種事件
4、程序控制
有些程序希望完全控制另一個程序的執行(如 Debug 程序),此時控制程序希望能夠攔截另一個程序的所有陷入和異常,並能夠及時知道它的狀態改變。

二、程序通訊的方式

1、管道( pipe )
管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。
2、有名管道(FIFO)
名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。
3、訊號
用於通知接收程序某個事件已經發生,主要作為程序間以及同一程序不同執行緒之間的同步手段。
4、訊號量
訊號量是一個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。
5、訊息佇列
訊息佇列是訊息的連結串列,存放在核心中。一個訊息佇列由一個識別符號(即佇列ID)來標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。
6、共享記憶體


共享記憶體(Shared Memory),指兩個或多個程序共享一個給定的儲存區。
特點:
共享記憶體是最快的一種 IPC,因為程序是直接對記憶體進行存取。
因為多個程序可以同時操作,所以需要進行同步。
訊號量+共享記憶體通常結合在一起使用,訊號量用來同步對共享記憶體的訪問。
7、套接字
套接字也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同機器間的程序通訊

Java面試的完整部落格目錄如下:Java筆試面試目錄