Qt之进程间通信(IPC)
簡述
進程間通信,就是在不同進程之間傳播或交換信息。那么不同進程之間存在著什么雙方都可以訪問的介質呢?進程的用戶空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享內存區。但是,系統空間卻是“公共場所”,所以內核顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪問的外設了。在這個意義上,兩個進程當然也可以通過磁盤上的普通文件交換信息,或者通過“注冊表”或其它數據庫中的某些表項和記錄交換信息。廣義上這也是進程間通信的手段,但是一般都不把這算作“進程間通信”。
進程間通信(IPC-Interprocess communication)是一組編程接口,能夠讓程序員協調不同的進程,使之能在一個操作系統里同時運行。這使得一個程序能夠在同一時間里處理許多用戶的要求。因為即使只有一個用戶發出要求,也可能導致一個操作系統中多個進程的運行,進程之間必須互相通話。IPC接口就提供了這種可能性。每個IPC方法均有自己的優點和局限性,因此,對于單個程序而言使用所有的IPC方法并不常見。
- 簡述
- 通信目的
- 通信方式
- Qt進程通信
- TCPIP
- Shared Memory
- D-Bus
- QProcess
- Session Management
- 更多參考
通信目的
數據傳輸:
一個進程需要將它的數據發送給另一個進程,發送的數據量在一個字節到幾兆字節之間。共享數據:
多個進程想要操作共享數據,一個進程對共享數據的修改,別的進程應該立刻看到。通知事件:
一個進程需要向另一個或一組進程發送消息,通知它(它們)發生了某種事件(如進程終止時要通知父進程)。資源共享:
多個進程之間共享同樣的資源。為了作到這一點,需要內核提供鎖和同步機制。進程控制:
有些進程希望完全控制另一個進程的執行(如Debug進程),此時控制進程希望能夠攔截另一個進程的所有陷入和異常,并能夠及時知道它的狀態改變。
進程通過與內核及其它進程之間的互相通信來協調它們的行為。Linux支持多種進程間通信(IPC)機制,信號和管道是其中的兩種。
通信方式
管道(pipe):
管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關系的進程間使用。進程的親緣關系通常是指父子進程關系。有名管道(named pipe):
有名管道也是半雙工的通信方式,但是它允許無親緣關系進程間的通信。信號量(semophore):
信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作為一種鎖機制,防止某進程正在訪問共享資源時,其它進程也訪問該資源。因此,主要作為進程間以及同一進程內不同線程之間的同步手段。消息隊列(message queue):
消息隊列就是消息的一個鏈表,存放在內核中并由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩沖區大小受限等缺點。信號(signal):
信號是一種比較復雜的通信方式,用于通知接收進程某個事件已經發生。共享內存(shared memory):
共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問。共享內存是最快的 IPC 方式,它是針對其他進程間通信方式運行效率低而專門設計的。它往往與其他通信機制,如信號兩,配合使用,來實現進程間的同步和通信。套接字(socket):
套接字也是一種進程間通信機制,與其他通信機制不同的是,它可用于不同及其間的進程通信。
Qt進程通信
在Qt應用程序中,Qt提供了幾個方法來實現進程間通信(IPC)。可以在助手中查找關鍵字”Inter-Process”進行查找。
TCP/IP
跨平臺的Qt Network模塊提供的類可以讓網絡編程更加便攜和方便。它提供了高級類(例如:QNetworkAccessManager、QFtp)通信,使用特定的應用程序級協議,和較底層的類(例如:QTcpSocket、QTcpServer、QSslSocket)用于實現協議。
Shared Memory
跨平臺的QSharedMemory-共享內存類,提供對操作系統的共享內存的實現。它允許多個線程和進程安全訪問共享內存段。此外,QSystemSemaphore可以用來控制訪問由系統共享的資源,以及進程之間的通信。
D-Bus
Qt的D-Bus模塊是一種可用于使用D-Bus協議實現IPC的唯一Unix庫。它將Qt的信號和槽機制延伸到IPC級別,允許由一個進程發出的信號被連接到另一個進程的槽。Qt的D-Bus文檔已經詳細說明如何使用Qt中的D-Bus模塊。
QProcess
跨平臺類QProcess可以用于啟動外部程序作為子進程,并與它們進行通信。它提供了用于監測和控制該子進程狀態的API。另外,QProcess為從QIODevice繼承的子進程提供了輸入/輸出通道。
Session Management
在Linux/X11平臺上,Qt提供了會話管理的支持。會話允許事件傳播到進程,例如,當檢測到關機時。進程和應用程序可以執行任何必要的操作,例如:保存打開的文檔。
更多參考
- Qt之進程間通信(Windows消息)
- Qt之進程間通信(共享內存)
- Qt之進程間通信(QProcess)
- Qt之進程間通信(TCP/IP)
總結
以上是生活随笔為你收集整理的Qt之进程间通信(IPC)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7救援模式--单机模式(单用
- 下一篇: 项目文件介绍