這篇文章源自我與朋友的一次郵件深度探討,後來也在我的演講《明日世界——雲端計算模型下的程序設計需求》中提及。這裡系統整理一下多年摸索出的心得,拋磚引玉,歡迎同行批評指正。
對於進程間通信(IPC),我堅定建議採用 Socket 方式(TCP/UDP 均可)。核心邏輯在於:將一個功能性進程視為一個獨立的服務。
大量採用共享內存、信號量等傳統 IPC 機制,會強制綁定進程部署在同一台物理機器上。這在雲端計算與微服務架構盛行的今天,嚴重阻礙了未來的負載均衡與水平擴展能力。
為此,我提出了 NPI(Network Process Identity)概念:以網絡地址(IP + Port)作為進程訪問的唯一標識。一個進程即服務器集群中的一個服務節點,通過標準網絡接口對外提供能力。調用者只需通過服務發現機制查詢到目標服務的網絡地址,即可依照協議發起請求並獲取結果。
基於此,我近年來已全面放棄 Unix/Windows 系統提供的各類進程共享方案,亦摒棄了 COM 等平台強耦合接口。我相信,這種面向網絡的服務化通信模型,才是適應未來雲端計算部署模型的正確選擇。
線程間同步往往讓人眼花繚亂,但經過抽象,我發現其核心需求僅歸納為兩類:
場景:線程 A 需調用線程 B 的工作,但不宜立即同步執行(如耗時操作、易崩潰風險),需將同步調用轉為異步提交。
方案:引入線程安全隊列作為緩衝區,配合守候線程消費任務。這其實正是 Windows 消息循環機制的核心原理。隊列作為被動共享資源,必須實現多線程安全的入隊/出隊操作。
場景:多個線程並發訪問同一資源(如一個 Socket 連接,多個收發線程需調用)。
方案:為該資源建立唯一互斥鎖,將該資源的所有功能方法納入鎖的保護範圍。完成封裝後,該資源即成為「線程安全資源」,任意線程調用均屬安全操作。
以上是我對多任務開發中「鎖」與「隊列」本質的理解:隊列解耦生產消費節奏,鎖守護共享資源一致性。這兩大原語,構建了並發世界中秩序的基石。期待與更多同行交流,共同精進。