Giao tiếp liên tiến trình

Trong khoa học máy tính, **giao tiếp liên tiến trình** hoặc **giao tiếp liên quá trình**, tiếng Anh: **inter-process communication** hoặc **interprocess communication** (viết tắt: **IPC**), đề cập cụ thể đến cơ chế một hệ điều hành cung cấp để cho phép các tiến trình (*process*) quản lý dữ liệu được chia sẻ. Thông thường, các ứng dụng có thể sử dụng IPC, được phân loại là máy khách và máy chủ, trong đó máy khách (*client*) yêu cầu dữ liệu và máy chủ (*server*) đáp ứng yêu cầu của máy khách. Nhiều ứng dụng là cả máy khách và máy chủ, như thường thấy trong điện toán phân tán. Các phương pháp để thực hiện IPC được chia thành các loại khác nhau dựa trên các yêu cầu phần mềm, chẳng hạn như yêu cầu về hiệu suất và mô đun, và hoàn cảnh hệ thống, chẳng hạn như băng thông mạng và độ trễ.

IPC rất quan trọng đối với quá trình thiết kế cho các microkernel và nanokernel. Microkernel làm giảm số lượng các chức năng được cung cấp bởi nhân (*kernel*). Những chức năng đó sau đó có được bằng cách giao tiếp với các máy chủ thông qua IPC, làm tăng đáng kể số lượng IPC so với một nhân nguyên khối thông thường.

## Phương pháp tiếp cận

## Đồng bộ hóa
Tùy thuộc vào giải pháp, cơ chế IPC có thể cung cấp đồng bộ hóa hoặc để lại cho các quy trình và luồng để giao tiếp với nhau (ví dụ: thông qua bộ nhớ dùng chung).

Mặc dù đồng bộ hóa sẽ bao gồm một số thông tin (ví dụ: có bật khóa hay không, một số lượng quá trình đang chờ, v.v.) nó không phải chủ yếu là một cơ chế truyền thông truyền thông tin *mỗi lần*.

Ví dụ về các nguyên thủy đồng bộ hóa là:

* Semaphore 
* Spinlock 
* Barrier 
* Loại trừ lẫn nhau

## Các ứng dụng

### Giao diện cuộc gọi thủ tục từ xa

* Remote Method Invocation (RMI) của Java 
* ONC RPC 
* XML-RPC hoặc SOAP 
* JSON-RPC 
* Message Bus (Mbus) (được chỉ định trong RFC 3259) 
* .NET Remoting

### Platform communication stack
Sau đây là các hệ thống nhắn tin và thông tin sử dụng các cơ chế IPC, nhưng không tự hiện thực IPC: 
* KDE's Desktop Communications Protocol (DCOP) deprecated by D-Bus
* D-Bus
* OpenWrt uses ubus micro bus architecture
* MCAPI Multicore Communications API
* SIMPL The Synchronous Interprocess Messaging Project for Linux (SIMPL)
* 9P (Plan&nbsp;9 Filesystem Protocol)
* Distributed Computing Environment (DCE)
* Thrift
* TIPC
* ZeroC's Internet Communications Engine (ICE)
* ØMQ
* Enduro/X Middleware
* YAMI4

### Operating system communication stack
Sau đây là các API dành riêng cho nền tảng hoặc ngôn ngữ lập trình: 
* Apple Computer's Apple events (previously known as Interapplication Communications (IAC)).
* Enea's LINX for Linux (open source) and various DSP and general purpose processors under OSE
* The Mach kernel's Mach Ports
* Microsoft's ActiveX, Component Object Model (COM), Microsoft Transaction Server (COM+), Distributed Component Object Model (DCOM), Dynamic Data Exchange (DDE), Object Linking and Embedding (OLE), anonymous pipes, named pipes, Local Procedure Call, MailSlots, Message loop, MSRPC, .NET Remoting, and Windows Communication Foundation (WCF)
* Novell's SPX
* POSIX mmap, message queues, semaphores, and shared memory
* RISC OS's messages
* Solaris Doors
* System V's message queues, semaphores, and shared memory
* OpenBinder Open binder
* QNX's PPS (Persistent Publish/Subscribe) service

### Mô hình đối tượng phân tán
Sau đây là các API cụ thể về ngôn ngữ lập trình hoặc nền tảng sử dụng IPC, nhưng bản thân chúng không hiện thực nó: 
* Libt2n for C++ under Linux only, handles complex objects and exceptions
* PHP's sessions
* Distributed Ruby
* Common Object Request Broker Architecture (CORBA)

## Xem thêm

* Lập trình mạng máy tính 
* Communicating Sequential Processes (mô hình CSP) 
* Data Distribution Service 
* Protected procedure call

## Tham khảo

* Stevens, Richard. *UNIX Network Programming, Volume 2, Second Edition: Interprocess Communications.* Prentice Hall, 1999. 
* U. Ramachandran, M. Solomon, M. Vernon *[http://portal.acm.org/citation.cfm?id=30371&coll=portal&dl=ACM Hardware support for interprocess communication]* Proceedings of the 14th annual international symposium on Computer architecture. Pittsburgh, Pennsylvania, United States. Pages: 178 - 188. Year of Publication: 1987 
* Crovella, M. Bianchini, R. LeBlanc, T. Markatos, E. Wisniewski, R. *[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=242738 Using communication-to-computation ratio in parallel program designand performance prediction]* 1–4 December 1992. pp.&nbsp;238–245 

## Liên kết ngoài

* Linux IPC với độ trễ dưới micro giây 
* Trang người dùng Linux ipc (5) mô tả System V IPC 
* [IPC Windows](http://msdn.microsoft.com/en-us/library/aa365574(VS.85).aspx) 
* IPC có sẵn bằng cách sử dụng Qt 
* Lập trình mạng Unix (Tập 2: Truyền thông liên tiến trình) của W. Richard Stevens 
* Giao tiếp và đường ống trong C 
* DIPC, Hệ thống phân tán V IPC