💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃個人主頁 :阿然成長日記 👈點擊可跳轉
📆 個人專欄: 🔹數據結構與算法🔹C語言進階🔹C++🔹Liunx
🚩 不能則學,不知則問,恥于問人,決無長進
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍
文章目錄
- 一、什么是進程間通信
- 二、為什么要進行進程間通信
- 三、進程間通信作用:
- 四、進程間通信的本質理解
- 五、 進程間通信的方式
一、什么是進程間通信
進程間通信(Inter-Process Communication,IPC)是指操作系統或計算機系統中,不同進程之間進行數據交換和通信的機制或技術。由于進程是操作系統中獨立運行的程序實例,而進程間通信允許這些獨立的進程之間相互協作、共享資源和進行數據交換。
二、為什么要進行進程間通信
- 根據我們前面講的,進程間是相互獨立的,進程具有獨立性啊,那通信不就不獨立了嗎?
- 進程通信的確會破壞進程的完全獨立性,因為進程通信的目的是為了實現進程之間的數據共享、同步和協作。通過進程通信,各個進程可以相互交互和共享資源,這意味著它們不再完全獨立,而是具有一定的相互依賴性和關聯性。
- 盡管進程通信破壞了進程的完全獨立性,但這種破壞是有意義且必要的。在實際的計算機系統和操作系統中,進程往往需要協同工作、共享資源和交換數據才能完成復雜的任務。進程通信提供了一種機制,使得不同進程之間可以進行必要的協作和交流,并提供了相應的同步和保護機制來確保數據的正確性和一致性。
- 所以這是一種權衡和折中的方案,但大部分情況下進程是相互獨立的。
三、進程間通信作用:
- 數據傳輸:一個進程需要將它的數據發送給另一個進程。
資源共享:多個進程之間共享同樣的資源(包括本地共享和遠程資源共享)。 - 進程控制:有些進程希望完全控制另一個進程的執行(如Debug進程),此時控制進程希望能夠攔截另一個進程的所有陷入和異常,并能夠及時知道它的狀態改變。
- 通知事件:一個進程需要向另一個或一組進程發送消息,通知它(它們)發生了某種事件(如進程終止時要通知父進程)。
四、進程間通信的本質理解
-
1.我們知道進程具有獨立性,是通過虛擬地址空間 + 頁表映射的方式來保持獨立性的,所以通信起來成本會比較高。
-
2.既然通信,那么前提是一定要讓不同的進程看到同一塊“內存”(特定的結構組織),這塊"內存"不能隸屬于任何一個進程,而更應該強調共享。
五、 進程間通信的方式
大體上可以分為3種通信方式:
1 .管道
匿名管道pipe
命名管道
2 .System V IPC
System V消息隊列
System V共享內存
System V信號量
System V只能用于單機通信(本地通信).
3.POSIX IPC
消息隊列
共享內存
信號量
互斥量
條件變量
讀寫鎖
POSIX IPC可以在單機通信的基礎上,進行網絡通信(遠程資源共享)。
以上所提到的方式,我會在后面的章節逐一講解,這個是進程間通信的方式.