Linux下進程/線程間通信如何正確學習?

APUE 和 Unix網路編程-進程間通信中都詳細介紹了 Linux 下的進程間通信方式。然而posix和systemV兩套API都提供了有些交叉的進程間同步和通信的方式。

同步和互斥方法太多,又有兩個大幫派;

陳碩的《linux多線程伺服器編程》里只建議用少數的同步方式,數據交換用socket;

也有的說法systemV方法現在已經很少使用,但是不同的書中介紹篇幅卻也不少;

在全面,粗略的了解後覺得應該有針對性的深入了解和實踐一下。

深入學習應如何側重(目標找後台開發工作)?

學習應達到什麼樣水平?

了解Linux內核中不同IPC的實現是否必要?


讀APUE和UNP。

然後對著擼demo:

Beej"s Guide to Unix IPC

UNIX programming examples


曾經給每種通信方式寫了demo,供參考

clpsz/linux-ipcs · GitHub

========================15.06.09補充============================

多謝大家的支持,放張REDEME.md圖片,看擴展說明就知道其實還沒寫完,歡迎PR:


不管什麼操作系統,IPC的方式通常就那麼幾類,優缺點在稍微現代一點的書上都能找到。

SystemV少用,盡量用POSIX.1-2001的,方便移植。


關於進程間通訊,我覺得主要是需要了解不同通訊方式的區別,因為他們都有不同的應用場景。譬如共享內存,管道,套接字以及信號量,互斥體,都是存在區別的。

建議先把demo都熟悉一遍,然後去看開源系統的源代碼,因為IPC是非常常用的。

剛畢業,經驗有限,勿噴。


man


推薦閱讀:

為什麼我用金山重裝的系統每次重裝完後都被360查出一大堆漏洞,而用360重裝的就不會?
兩種開放態度,為什麼桌面端 Windows/Linux 的口碑與移動端 iOS/Android 相反?
為什麼絕大多數電子產品的時間設定都只能調到1970年?
為什麼現在的操作系統基本上用C語言來實現?
不同編程語言之間是如何溝通的?

TAG:操作系統 | CC | Linux開發 | 多線程 | 後台開發 |