IPC — bir yoki bir nechta process o‘rtasida ma’lumot va synchronization almashish mexanizmlari. Uning to‘liq nomi Inter-Process Communication hisoblanadi.
Processlar alohida address space’da ishlaydi. Biri boshqasining xotirasini oddiy pointer orqali o‘qiy olmaydi. IPC operatsion tizim nazoratidagi aloqa yo‘lini beradi.
IPC bir host ichida yoki tarmoq orqali ishlashi mumkin.
Asosiy turlar
Keng tarqalgan IPC:
- pipe;
- named pipe;
- Unix domain socket;
- shared memory;
- message queue;
- semaphore;
- signal;
- memory-mapped file;
- RPC;
- TCP yoki UDP socket;
- D-Bus.
Har birining performance, reliability va murakkabligi boshqacha.
Pipe
Anonymous pipe odatda parent va child process orasida bir yo‘nalishli byte oqimi beradi.
Shell pipeline:
producer | consumer
bir process stdoutini boshqasining stdiniga bog‘laydi.
Pipe nomga ega emas va odatda related processlar tomonidan meros olinadi.
Named pipe
Filesystem nomiga ega FIFO mustaqil processlar orasida ishlaydi.
Writer va reader bir xil pathni ochadi.
Data disk fayli kabi doimiy saqlanmaydi; kernel buffer orqali o‘tadi.
Unix domain socket
Bir host ichida socket API orqali aloqa.
Turlari:
Afzalliklari:
- ikki yo‘nalish;
- bir nechta client;
- file descriptor uzatish;
- peer credential;
- filesystem ruxsati.
Shared memory
Bir xil fizik memory bir nechta process address space’iga map qilinadi.
Bu katta data uchun juda tez, chunki nusxa ko‘chirish kamayadi.
Biroq synchronization alohida kerak:
Noto‘g‘ri process pointer emas, offset yoki umumiy layout ishlatadi.
Message queue
Process xabarni queuega yuboradi, boshqa process oladi.
- message boundary;
- priority;
- buffering;
- blocking receive
berishi mumkin.
Queue hajmi cheklangan. Producer tez bo‘lsa backpressure kerak.
Signal
Signal processga kichik asinxron hodisa bildiradi.
Misollar:
- terminate;
- reload;
- child tugadi;
- timer;
- user-defined signal.
Signal katta payload tashish uchun mos emas.
Memory-mapped file
Fayl bir nechta process xotirasiga map qilinadi.
Processlar bir xil sahifalarni ko‘rishi mumkin.
Bu:
uchun ishlatiladi.
Flush va consistency qoidalari muhim.
RPC
Remote Procedure Call boshqa processdagi funksiyani lokal chaqiriqqa o‘xshatadi.
Qismlar:
- serialization;
- transport;
- request ID;
- timeout;
- error;
- authentication;
- versioning.
RPC bir hostdagi Unix socket yoki tarmoqdagi HTTP/gRPC orqali ishlashi mumkin.
Copy va zero-copy
Oddiy IPCda data user space’dan kernelga, keyin boshqa processga nusxalanishi mumkin.
Katta data uchun:
ishlatiladi.
Zero-copy mutlaq nusxasiz degani emas; maqsad ortiqcha copylarni kamaytirish.
Message boundary
Pipe va stream socket byte oqimini beradi. Yozuv chegarasi har doim saqlanmaydi.
Datagram socket va message queue xabar chegarasini saqlaydi.
Protocol stream ustida length prefix yoki delimiter ishlatadi.
Synchronization
Ma’lumot uzatish va synchronization bir xil emas.
Shared memory data beradi, lekin qachon tayyorligini bildirish uchun semaphore yoki event kerak.
Message queue esa data va wake-upni birga taqdim etishi mumkin.
Blocking va non-blocking
IPC operatsiyasi:
- data kelguncha kutishi;
- buffer bo‘shaguncha kutishi;
- darhol
EAGAINqaytarishi; - timeout bilan ishlashi
mumkin.
Event loop non-blocking IPCni kuzatadi.
Permission
IPC obyektiga kirish nazorat qilinadi.
- filesystem permission;
- user va group;
- ACL;
- namespace;
- capability;
- SELinux;
- authentication.
World-writable Unix socket yoki shared memory xavfli bo‘lishi mumkin.
Lifecycle
IPC obyektining umri turlicha.
- anonymous pipe — descriptorlar yopilgunga qadar;
- Unix socket path — fayl qolishi mumkin;
- shared memory — explicit unlinkgacha;
- message queue — kernel yoki broker siyosati;
- TCP socket — connection tugaguncha.
Crashdan keyin stale path yoki shared segment qolishi mumkin.
Backpressure
Receiver sekin bo‘lsa, buffer to‘ladi.
Producer:
- bloklanadi;
- xato oladi;
- xabar tashlaydi;
- diskka yozadi;
- rate’ni kamaytiradi.
Cheksiz queue xotira tugashiga olib keladi.
IPC va microservice
Microservice orasidagi tarmoq aloqasi ham IPCning taqsimlangan ko‘rinishi.
Lokal IPCdan farqli:
- packet loss;
- partial failure;
- yuqori latency;
- retry;
- duplicate;
- service discovery;
- TLS
hisobga olinadi.
Diagnostika
IPC muammosida:
- endpoint nomi;
- permission;
- process mavjudligi;
- buffer;
- blocked reader yoki writer;
- message format;
- shared memory layout;
- stale socket;
- timeout;
- serialization;
- resource limit
tekshiriladi.
Processlar ishlayotgan bo‘lsa ham, biri noto‘g‘ri protocol version ishlatishi mumkin.
Protocol versioning
IPC bir host ichida bo‘lsa ham sender va receiver turli dastur versiyasida bo‘lishi mumkin.
Xabar formatida:
bo‘lishi moslikni boshqaradi.
Yangilanish paytida eski process yangi fieldni tushunmasligi mumkin. Backward-compatible schema yoki birgalikda upgrade siyosati kerak.
Observability
IPC requestlar uchun latency, queue depth, error, timeout va peer process identifikatori kuzatiladi. Lokal aloqa tarmoqdan tez bo‘lsa ham, blocked consumer yoki to‘la buffer service’ni to‘xtatishi mumkin.
IPC tanlash
Kichik control xabar uchun socket yoki queue, katta umumiy buffer uchun shared memory qulay. Tanlovda data hajmi, processlar soni, persistence, security va recovery talabi hisobga olinadi.
Bog‘liq tushunchalar
Process, Pipe, FIFO, Unix domain socket, Shared memory, Message queue, Semaphore, Signal, RPC, File descriptor