Yuvalar üzerinden paylaşılan hafızaya karşı yapılan süreçler arası iletişimin artıları ve eksileri nelerdir?


9

İşlemler arası iletişim için daha birçok seçeneğin iki olabileceğini anlıyorum:

  1. Paylaşılan hafıza
  2. Yuva

Aslında bu iki seçeneğin bir Java uygulamasında hata ayıklamak için Intellij Idea tarafından açığa çıktığını gördüm. Her yaklaşımın artıları ve eksileri nelerdir bilmek istiyorum.


Daha yeni bir yöntem D-Bus.
ott--

@ ott-- D-Bus Unix etki alanı yuvalarını kullanmıyor mu?

@BrianMarshall Gerçekten de, etki alanı ve tcp / ip yuvaları.
ott--

Yanıtlar:


11

Başımın her biri için birkaç avantaj. Bu öğelerin bazılarının her durumda geçerli olmayabileceğini unutmayın; bunlar sadece genel gözlemlerdir.

Yuva

Basit ve kontrollü. Gerektiğinde veya çok az değişiklikle ağ soketlerine genişletilebilir. Programlama modeli serileştirmeyi gerektirir, bu da hangi verilerin gerçekten A'dan B'ye aktarıldığını düşünmenizi gerektirir. Senkronizasyon mutlaka iletişim mekanizmasına yerleşiktir; başka senkronizasyon gerekmez.

Paylaşılan Bellek

Mutlaka bir sistem çağrısı gerektirmez (bu nedenle potansiyel olarak daha hızlı). Paylaşım, verilerin aktarılmasını açıkça gerektirmez - veriler alıcının alamadığı şekilde kullanılabilir (bant genişliğinin alıcının kullanmayacağı verileri aktarmak için boşa harcanması gerekmez). Serileştirme / serileştirme adımı olmaması, iletişim yüküne harcanan zaman olmadığı anlamına gelir.


4
+1: soketler dağıtılmış sistemlere kadar ölçeklenirken, paylaşılan bellek çok daha hızlıdır.
mouviciel

@tylerl Paylaşılan bellek neden sistem çağrısı gerektirmiyor?
Geek

@Geek: Modern işletim sistemlerinde sanal bellek yönetiminin nasıl uygulandığını okuyun. Temel olarak, kaputun altında paylaşılan bellek normal işlem belleğiyle hemen hemen aynıdır. Öyle ki, aynı fiziksel sayfa bilerek 2 (veya N) farklı sürece eşleştirilir. Ancak bu eşleme kurulduktan sonra, * px = 5, px normal bir değişkeni gösterip göstermediğine veya paylaşılan bir bellek segmentinin içine işaret ettiğine bakılmaksızın aynı talimatlar dizisini üretir.
DXM

teknik olarak, hedef gönderdiğiniz biçimde bir ham bayt akışını kabul edebiliyorsa, verileri bir soket üzerinden serileştirmeniz gerekmez. Çoğu insan açıkça herkese gönderebilmeleri için serileştirir.
gbjbaanb

1
@gbjbaanb Kodlama yapısı ne olursa olsun, teknik olarak verileri sıralı bir bit dizisi olarak iletilirse serileştirdiğinizi düşünüyorum .
tylerl

6

Soketler bire birdir. Aynı şeyi birden çok işleme göndermek istiyorsanız, birden çok sokete ihtiyacınız vardır. Paylaşılan bellekle, birden çok okuyucunuz ve ayrıca birden fazla yazarınız olabilir.

Soketler kaynak yoğun. Her mesaj işletim sisteminden geçer. Paylaşılan bellekle, paylaşılan belleği eşleştirirsiniz, ancak bir kez uygulamanızın belleğine girersiniz ve o andan itibaren kullanmanız gerekir. Ancak, paylaşılan belleği kullandığınızda işletim sistemine devam etmeniz gerekir; aşağıya bakınız.

Soketler senkronize edilir (UDP kullanmadığınız sürece). Paylaşılan hafıza ile, kaçınılmaz olarak diğer süreçlere paylaşılan hafızaya okumanın veya yazmanın uygun olmadığını söylemek için bazı ek mekanizmalara ihtiyacınız vardır. Bunu yapmayın ve bozuk bellekle ilgili sorunlarınız olacak. Örnek: A sürecinin yığın paylaşımlı bir hafızayı okumaya başladığını, ancak okuma boyunca kısmen değiştirildiğini varsayalım. İşlem B, aynı paylaşılan bellek yığınına yazar. A süreci yeniden başlatıldığında ve paylaşılan belleği okumaya devam ettiğinde, okuduğu şey eski ve yeni verilerin bir karışımıdır. Bunu önlemek için, paylaşılan belleği kullanırken hala işletim sisteminden geçersiniz.

Soket tabanlı bir uygulama setini ağ soketleri kullanan bir uygulamaya dönüştürmek oldukça kolaydır. İşlemeyi laboratuarınızdaki tüm makinelere, hatta daha uzak yerlere yayabilirsiniz. bunu paylaşılan hafıza ile yapamaz. Paylaşılan bellek tabanlı bir çözümle bir makineye kilitlenmişsinizdir.

Soketler düşük hacimli veriler, büyük hacimli veriler için paylaşılan hafıza için tasarlanmıştır. Farklı problemleri çözmek için farklı mekanizmalar mevcuttur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.