Windows与Linux下进程间通信技术比较
生活随笔
收集整理的這篇文章主要介紹了
Windows与Linux下进程间通信技术比较
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一般我們寫的程序都是以單個進程的方式來運行的,比較少涉及到多進程。特別是在windows下,因為Windows是按照線程來分配CPU時間片的,線程是最小的調度單位,所以在Windows下更多的用到多線程,在同一個進程里創建多個線程來執行不同的任務,達到充分利用CPU的目的。線程之間可以共享進程的資源,比如內存、變量,但是多線程有一個不好的地方,由于這些線程是在同一個進程空間里執行,所以只要一個線程奔潰,整個進程也就奔潰了,程序就退出了。多進程由于是在不同的進程空間里,一個進程奔潰,不會影響到其它的進程,但是進程之間要交換信息的話,就比較麻煩了,不像多線程可以簡單的通過一個全局變量來通訊。為了解決進程間交換信息的問題,所以操作系統提供了進程間通訊(IPC)的技術。
1、管道(Pipe)
一個進程往管道里寫數據,另一個進程從管道里取數據。管道又可以分為匿名管道,匿名管道只能在父、子進程之間通訊。還有一種命名管道(named pipes),Linux下叫做FIFO,命名管道可以在任意進程之間通訊。
2、油槽(Slot)
Linux下叫做消息隊列(Message)。就像我們日常通過郵局寄送信件。一個進程寄送,另一個進程接收。
3、消息(Message)
Linux下叫做信號(Signal)。Windows是消息驅動的,進程可以調用WIN32 API函數SendMessage或者PostMessage向另一個進程發送消息,Windows系統也可以向進程發送消息。
Linux下可以通過kill、raise、alarm、pause這些信號處理系統調用來實現。
4、共享內存(Shared Memory)
進程之間通過共享一塊內存的方式來交換數據。
5、Socket
通常我們使用socket來進行網絡通訊,一方作為客戶機,另一方作為服務器。同樣的,socket也可以作為進程之間通訊的一種方式。
以上方式是Windows和Linux共有的通訊方式。Windows下進程之間還可以通過系統剪貼板的方式來通訊,一個進程把數據復制到剪貼板,另一個進程把數據從剪貼板上粘貼過來。
其實除了以上這些比較常用的通訊方式,個人認為還可以通過文件的方式。一個進程把數據寫入文件,另一個進程從文件里讀取數據。
當然還可以通過一個中間件的方式,比如Windows下的msmq(消息隊列)中間件,Apache上也提供了一個用Java寫的開源消息中間件Apache ActiveMQ。
1、管道(Pipe)
一個進程往管道里寫數據,另一個進程從管道里取數據。管道又可以分為匿名管道,匿名管道只能在父、子進程之間通訊。還有一種命名管道(named pipes),Linux下叫做FIFO,命名管道可以在任意進程之間通訊。
2、油槽(Slot)
Linux下叫做消息隊列(Message)。就像我們日常通過郵局寄送信件。一個進程寄送,另一個進程接收。
3、消息(Message)
Linux下叫做信號(Signal)。Windows是消息驅動的,進程可以調用WIN32 API函數SendMessage或者PostMessage向另一個進程發送消息,Windows系統也可以向進程發送消息。
Linux下可以通過kill、raise、alarm、pause這些信號處理系統調用來實現。
4、共享內存(Shared Memory)
進程之間通過共享一塊內存的方式來交換數據。
5、Socket
通常我們使用socket來進行網絡通訊,一方作為客戶機,另一方作為服務器。同樣的,socket也可以作為進程之間通訊的一種方式。
以上方式是Windows和Linux共有的通訊方式。Windows下進程之間還可以通過系統剪貼板的方式來通訊,一個進程把數據復制到剪貼板,另一個進程把數據從剪貼板上粘貼過來。
其實除了以上這些比較常用的通訊方式,個人認為還可以通過文件的方式。一個進程把數據寫入文件,另一個進程從文件里讀取數據。
當然還可以通過一個中間件的方式,比如Windows下的msmq(消息隊列)中間件,Apache上也提供了一個用Java寫的開源消息中間件Apache ActiveMQ。
轉載于:https://www.cnblogs.com/weiqubo/archive/2011/03/08/1976865.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Windows与Linux下进程间通信技术比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracl数据库中大数据的备份-1
- 下一篇: 神州泰岳2050万元收买并增资奇点国际