本文系統剖析 Linux 繼承自 Unix 的六大經典 IPC 機制,涵蓋原理、API、特性、適用場景與選型建議,為系統程式開發者提供決策參考。
pipe(fd) 建立,fd[0] 讀、fd[1] 寫。PIPE_BUF (通常 4KB/64KB)。mkfifo(path, mode) 建立檔案系統節點。SIGPIPE。sem_init/sem_wait/sem_post/sem_destroy (執行緒/進程共享)。semget/semop/semctl (訊號量集,進程間共享)。sigaction handler)。sigval 負載。long mtype 供優先級/類型過濾。msgget/msgsnd/msgrcv/msgctl;POSIX: mq_open/mq_send/mq_receive/mq_notify (支援非同步通知)。shmget/shmat/shmdt/shmctl;POSIX: shm_open/mmap。SCM_RIGHTS)。socket/bind/listen/accept/connect/send/recv,配合 epoll/io_uring 實現高並發。| 場景 | 首選機制 | 備選/補充 |
|---|---|---|
| 父子進程簡單單向流 | 無名管道 | |
| 無親緣進程小資料塊 | 命名管道 (FIFO) | Unix Domain Socket |
| 多進程/執行緒同步互斥 | 訊號量 / mutex | 條件變數 |
| 非同步事件通知 | 訊號 | eventfd + epoll |
| 結構化訊息、優先級 | 訊息佇列 (POSIX mq) | ZeroMQ/nanomsg |
| 大資料量高頻零拷貝 | 共享記憶體 + 訊號量 | memfd + userfaultfd |
| 跨主機服務/RPC | TCP Socket (gRPC/HTTP) | rdma/cm |
沒有萬能 IPC,只有適合場景的選擇。現代高效能系統傾向:本機用 Unix Domain Socket + 共享記憶體;跨節點用 TCP Socket + 協議框架;簡單協作用管道/FIFO;複雜同步用 POSIX 訊號量/互斥鎖/條件變數。深入理解各機制邊界與代價,方能架構穩健高效的並發系統。