linux内核多种进程间通信机制
1.管道通信:無(wú)名管道和有名管道
(1)管道(無(wú)名管道)
1.管道通信的原理:內(nèi)核維護(hù)的一塊內(nèi)存,有讀端和寫(xiě)端(管道是單向通信的)
2.管道通信的方法:父進(jìn)程創(chuàng)建管理后fork子進(jìn)程,子進(jìn)程繼承父進(jìn)程的管道fd
3.管道通信的限制:只能在父子進(jìn)程間通信、半雙工
4.管道通信的函數(shù):pipe、write、read、close
(2)有名管道(fifo)
1.有名管道的原理:實(shí)質(zhì)也是內(nèi)核維護(hù)的一塊內(nèi)存,表現(xiàn)形式為一個(gè)有名字的文件
2.有名管道的使用方法:固定一個(gè)文件名,2個(gè)進(jìn)程分別使用mkfifo創(chuàng)建fifo文件,然后分別open打開(kāi)獲取到fd,然后一個(gè)讀一個(gè)寫(xiě)
3.管道通信限制:半雙工(注意不限父子進(jìn)程,任意2個(gè)進(jìn)程都可)
4.管道通信的函數(shù):mkfifo、open、write、read、close
2.SystemV IPC(Inter-Process Communication 進(jìn)程間通信):信號(hào)量、消息隊(duì)列、共享內(nèi)存 ?
IPC:Inter-Process Communication 進(jìn)程間通信,兩個(gè)任意進(jìn)程之間的通信,實(shí)質(zhì)也是內(nèi)核提供的公共內(nèi)存,系統(tǒng)通過(guò)一些專(zhuān)用API來(lái)提供SystemV IPC功能
| msg | message (queue) | 消息隊(duì)列 |
| sem | semaphore | 信號(hào)量 |
| shm | shared memory | 共享內(nèi)存 |
(1)消息隊(duì)列
1.本質(zhì)上是一個(gè)隊(duì)列,隊(duì)列可以理解為(內(nèi)核維護(hù)的一個(gè))FIFO
2.工作時(shí)A和B 2個(gè)進(jìn)程進(jìn)行通信,A向隊(duì)列中放入消息,B從隊(duì)列中讀出消息。
(2)信號(hào)量(通過(guò)判斷信信號(hào)量的值,相當(dāng)于一個(gè)鎖)
1.實(shí)質(zhì)就是個(gè)計(jì)數(shù)器(其實(shí)就是一個(gè)可以用來(lái)計(jì)數(shù)的變量,可以理解為int a)
2.通過(guò)計(jì)數(shù)值來(lái)提供互斥和同步
(3)共享內(nèi)存
1.大片內(nèi)存直接映射
2.類(lèi)似于LCD顯示時(shí)的顯存用法
例子:
視頻編解碼就是運(yùn)用共享內(nèi)存加信號(hào)量的方法使得AB進(jìn)程間相互通信
? ? ? ? ? ?信號(hào)量
A進(jìn)程----------->B進(jìn)程
| ?|
|--共享內(nèi)存--|
假設(shè)信號(hào)量初始值s=1,A進(jìn)程往共享內(nèi)存?zhèn)鬏敂?shù)據(jù),傳輸完成后把s值置為0,b進(jìn)程觀測(cè)到s為0后,開(kāi)始從共享內(nèi)存讀取數(shù)據(jù),讀取完成后s置為1,在這期間A進(jìn)程讀取到s的值一直為0,不再往里面?zhèn)鬏敂?shù)據(jù),直到s被b進(jìn)程置為1,再往共享內(nèi)存中傳輸數(shù)據(jù)
?
參考?http://blog.csdn.net/guodongxiaren/article/details/43876207
3.Socket域套接字
4.信號(hào)通信
轉(zhuǎn)載于:https://www.cnblogs.com/Deanboy/p/7552831.html
總結(jié)
以上是生活随笔為你收集整理的linux内核多种进程间通信机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java并发程序设计(十一)设计模式与并
- 下一篇: java技术系列(一) Enum