Bosh sahifa Wiki IPC

IPC

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:

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.

Kernel yoki broker:

  • 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:

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:

  • shared memory;
  • sendfile;
  • file descriptor passing;
  • memory mapping;
  • kernel zero-copy

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 EAGAIN qaytarishi;
  • timeout bilan ishlashi

mumkin.

Event loop non-blocking IPCni kuzatadi.

Permission

IPC obyektiga kirish nazorat qilinadi.

World-writable Unix socket yoki shared memory xavfli bo‘lishi mumkin.

Lifecycle

IPC obyektining umri turlicha.

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:

hisobga olinadi.

Diagnostika

IPC muammosida:

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