Linux中的管道是什麼?管道與共享記憶體的區別有哪些?
管道是什麼?簡單來說就是,一個命令的結果作為另外一個命令(結果)的輸入,管道是linux提供的一種常見的程式通訊工具,也是很多shell命令能夠靈活組合產生強大用途的一個重要工具。
管道是Linux由Unix那裡繼承過來的程式間的通訊機制,它是Unix早期的一個重要通訊機制。其思想是,在記憶體中建立一個共享檔案,從而使通訊雙方利用這個共享檔案來傳遞資訊。由於這種方式具有單向傳遞資料的特點,所以這個作為傳遞訊息的共享檔案就叫做“管道”。
在管道的具體實現中,根據通訊所使用的的檔案是否具有名稱,有“匿名管道”和“命名管道”。
管道與共享記憶體的區別
乍一看,感覺管道和共享記憶體並不是區別很大,這裡介紹一下兩者之間的區別:
管道需要在核心和使用者空間進行四次的資料複製:由使用者空間的buf中將資料複製到核心中 -> 核心將資料複製到記憶體中 -> 記憶體到核心 -> 核心到使用者空間的buf。而共享記憶體則只複製兩次資料:使用者空間到記憶體 -> 記憶體到使用者空間。
管道用迴圈佇列實現,連續傳送資料可以不限大小。共享記憶體每次傳遞資料大小是固定的;
共享記憶體可以隨機訪問被對映檔案的任意位置,管道只能順序讀寫;
管道可以獨立完成資料的傳遞和通知機制,共享記憶體需要藉助其他通訊方式進行訊息傳遞。
也就是說,兩者之間最大的區別就是:
管道是Linux由Unix那裡繼承過來的程式間的通訊機制,它是Unix早期的一個重要通訊機制。其思想是,在記憶體中建立一個共享檔案,從而使通訊雙方利用這個共享檔案來傳遞資訊。由於這種方式具有單向傳遞資料的特點,所以這個作為傳遞訊息的共享檔案就叫做“管道”。
在管道的具體實現中,根據通訊所使用的的檔案是否具有名稱,有“匿名管道”和“命名管道”。
管道與共享記憶體的區別
乍一看,感覺管道和共享記憶體並不是區別很大,這裡介紹一下兩者之間的區別:
管道需要在核心和使用者空間進行四次的資料複製:由使用者空間的buf中將資料複製到核心中 -> 核心將資料複製到記憶體中 -> 記憶體到核心 -> 核心到使用者空間的buf。而共享記憶體則只複製兩次資料:使用者空間到記憶體 -> 記憶體到使用者空間。
管道用迴圈佇列實現,連續傳送資料可以不限大小。共享記憶體每次傳遞資料大小是固定的;
共享記憶體可以隨機訪問被對映檔案的任意位置,管道只能順序讀寫;
管道可以獨立完成資料的傳遞和通知機制,共享記憶體需要藉助其他通訊方式進行訊息傳遞。
也就是說,兩者之間最大的區別就是: 共享記憶體區是最快的可用IPC形式,一旦這樣的記憶體區對映到共享它的程式的地址空間,這些程式間資料的傳遞,就不再透過執行任何進入核心的系統呼叫來傳遞彼此的資料,節省了時間。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2930905/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux系統程式設計之命名管道與共享記憶體Linux程式設計記憶體
- 在Linux中,什麼是管道?它是如何工作的?Linux
- Linux管道命令是什麼?如何使用?Linux
- 在Linux中,管道(pipe)和重定向(redirection)的是什麼?Linux
- 介紹 Linux 中的管道和命名管道Linux
- 在Linux中,什麼是管道操作,以及如何使用它?Linux
- 記憶體科普:DIMM是指什麼,和DDR有什麼區別?記憶體
- Linux中什麼是打包?與歸檔有什麼區別?Linux
- xargs 命令詳解,xargs 與管道的區別
- 共享儲存是什麼意思?與DRBD有什麼區別?
- Docker有哪些特點?與Linux有什麼區別?DockerLinux
- Linux 中的“大記憶體頁”(hugepage)是個什麼?Linux記憶體
- Linux系統中rpm與yum的區別是什麼?Linux
- Linux 命令 管道 緩衝區Linux
- Linux中程式與程式分別指什麼?兩者的區別有哪些?Linux
- OpenResty 和 Nginx 的共享記憶體區是如何消耗實體記憶體的RESTNginx記憶體
- 等保、分保是什麼?等保與分保的區別有哪些?
- Linux共享記憶體的管理Linux記憶體
- 【linux】管道!!!Linux
- Linux 管道Linux
- [Linux]管道Linux
- Linux中的bind是什麼意思?有哪些命令?Linux
- 什麼是冪等資料管道? - Alaro
- 在Linux中,什麼是虛擬記憶體?它是如何工作的?Linux記憶體
- Linux中fork和exec是什麼?有何區別?Linux
- 什麼是Java記憶體模型(JMM)中的主記憶體和本地記憶體?Java記憶體模型
- [Linux]共享記憶體Linux記憶體
- 什麼是python?與PHP有什麼區別?PythonPHP
- Linux中master是什麼意思?有哪些重要的功能?LinuxAST
- Linux中uuid是什麼?作用有哪些?LinuxUI
- DDR3與DDR4記憶體有什麼區別?DDR4和DDR3記憶體區別對比分析記憶體
- Linux管道符Linux
- Linux 之管道Linux
- cython和python分別是什麼?區別有哪些?Python
- openharmony 多執行緒的方式有哪些?兩個worker執行緒資料如何通訊、記憶體如何共享、與Java多執行緒有什麼區別?執行緒記憶體Java
- Linux記憶體是怎麼工作的?Linux記憶體
- 什麼是Linux?和Unix之間有什麼較大的區別?Linux
- 在Linux中,tomcat和nginx的區別是什麼?LinuxTomcatNginx