Process'ler arası iletişim (IPC) yöntemleri nelerdir? Hangisini ne zaman seçersiniz?
Cevap
Process'lerin adres alanları birbirinden izole olduğu için veri paylaşmak için işletim sisteminin sağladığı IPC mekanizmaları gerekir. Ana yöntemler: pipe, named pipe (FIFO), message queue, shared memory, socket ve signal.
| Yöntem | Özellik | Tipik kullanım |
|---|---|---|
| Anonymous pipe | Tek yönlü byte akışı, akraba process'ler arası | Shell'de ls, grep zinciri |
| Named pipe (FIFO) | Dosya sisteminde ismi olan pipe, ilgisiz process'ler | Basit yerel komut kanalları |
| Message queue | Mesaj sınırları korunur, kernel'de tamponlanır | POSIX mq_open, iş dağıtımı |
| Shared memory | En hızlı; veri kopyalanmaz, senkronizasyon sizde | Veritabanı buffer'ları, video işleme |
| Unix domain socket | Aynı makinede çift yönlü, socket API'si | Docker daemon, PostgreSQL yerel bağlantısı |
| TCP/UDP socket | Ağ üzerinden de çalışır | Mikroservisler, istemci-sunucu |
| Signal | Asenkron bildirim, veri taşımaz | SIGTERM ile kapanma, SIGHUP ile config yenileme |
Shared memory neden en hızlı?
Diğer yöntemlerde veri kullanıcı alanından kernel'e, oradan diğer process'e kopyalanır (en az iki kopya ve system call). Shared memory'de iki process aynı fiziksel sayfayı kendi adres alanına map eder; okuma/yazma normal bellek erişimidir. Bedeli: race condition'ları semaphore veya mutex ile sizin önlemeniz gerekir.
Örnek: pipe
import subprocess
p1 = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["grep", ".py"], stdin=p1.stdout, stdout=subprocess.PIPE, text=True)
p1.stdout.close()
print(p2.communicate()[0])Seçim rehberi
- Aynı makinede yüksek hacimli veri: shared memory (
mmap, Python'damultiprocessing.shared_memory). - Aynı makinede yapılandırılmış istek/yanıt: Unix domain socket.
- Farklı makineler: TCP üzerinde HTTP/gRPC veya bir message broker (Kafka, RabbitMQ).
- Sadece "kapan" veya "yeniden yükle" bildirimi: signal.
Thread'ler aynı adres alanını paylaştığı için IPC'ye ihtiyaç duymaz; ama senkronizasyon yine gereklidir.
İlgili İşletim Sistemleri soruları
- Concurrency ile parallelism arasındaki fark nedir?
- Race condition nedir? Bir örnekle nasıl önleneceğini gösterin.
- Context switch nedir? Neden maliyetlidir?
- Virtual memory ve paging nasıl çalışır? Page fault nedir?
- Mutex ile semaphore arasındaki fark nedir?
- Deadlock nedir? Oluşması için gereken dört koşul nelerdir ve nasıl önlenir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.