İleti geçişi - Message passing

Gelen bilgisayar bilimleri , mesaj geçen (yani çalışan bir davranışı oluşturmak için olan bir tekniktir programı bir üzerine) bilgisayara . Çağıran program bir işleme (bir aktör veya nesne olabilir ) bir mesaj gönderir ve daha sonra bazı uygun kodları seçip çalıştırmak için bu işleme ve destekleyici altyapısına güvenir. İleti geçişi, bir işlemin, alt yordamın veya işlevin doğrudan adıyla çağrıldığı geleneksel programlamadan farklıdır . İleti geçişi, bazı eşzamanlılık ve nesne yönelimli programlama modellerinin anahtarıdır .

Mesaj iletme, modern bilgisayar yazılımlarında her yerde bulunur . Bir programı oluşturan nesnelerin birbirleriyle çalışmasının bir yolu ve farklı bilgisayarlarda (örneğin İnternet ) çalışan nesneler ve sistemlerin etkileşime girmesi için bir araç olarak kullanılır. Mesaj geçişi, kanallar dahil olmak üzere çeşitli mekanizmalar tarafından gerçekleştirilebilir .

genel bakış

Mesaj iletme, bir bilgisayarda davranışı (yani, bir programı çalıştırmayı) çağırmak için kullanılan bir tekniktir. Bir programı adıyla çağırmanın geleneksel tekniğinin aksine, mesaj iletimi , genel işlevi belirli uygulamalardan ayırmak için bir nesne modeli kullanır . Çağıran program bir mesaj gönderir ve uygun kodu seçmek ve yürütmek için nesneye güvenir. Bir ara katman kullanma gerekçeleri esas olarak iki kategoriye ayrılır: kapsülleme ve dağıtım.

Kapsülleme , yazılım nesnelerinin, bu hizmetlerin nasıl uygulandığını bilmeden veya umursamadan diğer nesnelerdeki hizmetleri çağırabilmesi gerektiği fikridir. Kapsülleme, kodlama mantığının miktarını azaltabilir ve sistemleri daha sürdürülebilir hale getirebilir. Örneğin, bir geliştiriciyi hangi alt rutinin veya fonksiyonun çağıracağını belirleyen IF-THEN ifadelerine sahip olmak yerine, nesneye sadece bir mesaj gönderebilir ve nesne, türüne göre uygun kodu seçecektir.

Bunun nasıl kullanılabileceğinin ilk örneklerinden biri bilgisayar grafikleri alanındaydı. Grafik nesnelerini manipüle etmenin çeşitli karmaşıklıkları vardır. Örneğin, kapalı bir şeklin alanını hesaplamak için doğru formülü kullanmak, şeklin üçgen, dikdörtgen, elips veya daire olmasına bağlı olarak değişecektir. Geleneksel bilgisayar programlamasında bu, şeklin ne tür bir nesne olduğunu test eden ve uygun kodu çağıran uzun IF-THEN ifadeleriyle sonuçlanır. Bu işlemek için nesne yönelimli bir yol olarak adlandırılan bir sınıf tanımlamaktır Shapegibi alt sınıfları ile Rectangleve Ellipse(sırayla alt sınıfları vardır ki Squareve Circlesadece herhangi bir mesaj göndermek için ve daha sonra) Shapealanını hesaplamak için soruyorum. Her Shapenesne daha sonra o tür nesne için uygun formülle alt sınıfın yöntemini çağırır.

Dağıtılmış mesaj geçişi, geliştiricilere, farklı yerlerde ve farklı zamanlarda farklı bilgisayarlar üzerinde çalışan alt sistemlerden oluşan sistemler oluşturmak için ortak hizmetler sağlayan bir mimari katmanı sağlar. Dağıtılmış bir nesne bir mesaj gönderirken, mesajlaşma katmanı aşağıdaki gibi sorunları halledebilir:

  • Mesajın kaynaklandığı farklı konumlarda farklı işletim sistemleri ve programlama dilleri kullanarak işlemi bulma.
  • İletiyi işlemek için uygun nesne şu anda çalışmıyorsa iletiyi bir kuyruğa kaydetme ve ardından nesne uygun olduğunda iletiyi çağırma. Ayrıca, gerekirse gönderen nesne onu almaya hazır olana kadar sonucu saklamak.
  • Dağıtılmış işlemler için çeşitli işlem gereksinimlerinin kontrol edilmesi, örneğin ACID - verilerin test edilmesi.

Senkronize ve asenkron mesaj geçişi

Senkron mesaj geçişi

Aynı anda çalışan nesneler arasında senkronize mesaj geçişi gerçekleşir. Java ve Smalltalk gibi nesne yönelimli programlama dilleri tarafından kullanılır.

Eşzamanlı mesajlaşma, eşzamanlı bir işlev çağrısına benzer; işlevi çağıran kişinin işlev tamamlanana kadar beklediği gibi, gönderme işlemi de alma işlemi tamamlanana kadar bekler. Bu, bazı uygulamalar için senkronize iletişimi çalışmaz hale getirebilir. Örneğin, büyük, dağıtılmış sistemler kullanılabilir olacak kadar iyi performans göstermeyebilir. Bu tür büyük, dağıtılmış sistemlerin bazı alt sistemleri bakım vb. nedenlerle kapalıyken çalışması gerekebilir.

Yalnızca senkronize mesaj geçişini kullanarak birbirine e-posta gönderen 100 masaüstü bilgisayara sahip yoğun bir iş ofisi hayal edin. Bir çalışanın bilgisayarını kapatması, çalışan tek bir e-postayı işlemek için bilgisayarını tekrar açana kadar diğer 99 bilgisayarın donmasına neden olabilir.

Asenkron mesaj geçişi

Eşzamansız mesaj geçişi ile, alıcı nesne, istekte bulunan nesne mesajı gönderdiğinde kapalı veya meşgul olabilir. İşlev çağrısı benzetmesine devam edersek, çağrılan işlevin tamamlanmasını beklemeden hemen dönen bir işlev çağrısı gibidir. Mesajlar, alıcı süreç onları talep edene kadar saklandıkları bir kuyruğa gönderilir. Alma işlemi, mesajlarını işler ve sonuçları, orijinal işlem (veya belirlenmiş bir sonraki işlem) tarafından alınması için bir kuyruğa gönderir.

Asenkron mesajlaşma depolanması ve eşzamanlı olarak çalışmayabilir, ve genel olarak yazılım (genellikle adlandırılan bir ara düzeyde tarafından işlenir sistemleri verileri yeniden transferi için bir ek özellikler gerektirir katman ); Yaygın bir tür, Mesaj yönelimli ara katman yazılımıdır (MOM).

Asenkron iletişimde gerekli olan arabellek dolduğunda sorunlara neden olabilir. Gönderenin bloke edilip edilmeyeceğine veya gelecekteki mesajların atılıp atılmayacağına karar verilmelidir. Engellenen bir gönderen kilitlenmeye neden olabilir . Mesajlar düşerse, iletişim artık güvenilir değildir.

melezler

Senkronize iletişim, bir Senkronizatör kullanılarak asenkron iletişimin üzerine kurulabilir . Örneğin, α-Synchronizer, gönderenin her zaman alıcıdan bir onay mesajı beklemesini sağlayarak çalışır. Gönderici, yalnızca onay alındıktan sonra bir sonraki mesajı gönderir. Öte yandan, senkron iletişimin üzerine asenkron iletişim de kurulabilir. Örneğin, modern mikro çekirdekler genellikle yalnızca bir eşzamanlı mesajlaşma ilkel sağlar ve yardımcı iş parçacıkları kullanılarak üstte eşzamansız mesajlaşma uygulanabilir .

Dağıtılmış nesneler

Mesaj ileten sistemler, dağıtılmış veya yerel nesneleri kullanır. Dağıtılmış nesnelerle, gönderici ve alıcı farklı bilgisayarlarda, farklı işletim sistemlerini çalıştıran, farklı programlama dilleri kullanan vb. olabilir. Bu durumda veri yolu katmanı, verilerin bir sistemden diğerine dönüştürülmesi, veri gönderme ve alma ile ilgili ayrıntılarla ilgilenir. ağ, vb Uzaktan Yordam Çağrısı içinde (RPC) protokolü Unix bu erken bir örneğiydi. Bu tür mesaj iletiminde, göndericinin veya alıcının nesne yönelimli programlama kullanmasının bir gereklilik olmadığını unutmayın. Prosedürel dil sistemleri, mesaj gönderip alabilen büyük taneli nesneler olarak paketlenebilir ve işlenebilir.

Dağıtılmış nesneleri destekleyen sistem örnekleri şunlardır: Emerald , ONC RPC , CORBA , Java RMI , DCOM , SOAP , .NET Remoting , CTOS , QNX Neutrino RTOS , OpenBinder ve D-Bus . Dağıtılmış nesne sistemleri "paylaşılmayan hiçbir şey" sistemleri olarak adlandırılmıştır, çünkü ileti geçen soyutlama, ileti gönderme uygulamasında kullanılabilecek temel durum değişikliklerini gizler.


Dağıtılmış veya eşzamansız mesaj iletme, bir prosedür çağırmaya kıyasla ek yüke sahiptir. Mesaj geçişinde, argümanlar yeni mesaja kopyalanmalıdır. Bazı argümanlar, tümü kopyalanıp alıcı nesneye iletilmesi gereken megabaytlarca veri içerebilir.

Geleneksel prosedür çağrıları , bellek kullanımı, aktarım süresi ve yerellik açısından mesaj geçişinden farklıdır . Argümanlar, tipik olarak, ek depolama veya transfer süresi gerektirmeyen genel amaçlı kayıtlar tarafından veya argümanların adreslerini (birkaç bit) içeren bir parametre listesinde alıcıya iletilir . Sistemler ayrı adres alanları kullandığından, dağıtık sistemlerde adres geçişi mümkün değildir.

Web tarayıcıları ve web sunucuları , mesaj ileterek iletişim kuran süreçlerin örnekleridir. Bir URL işlem iç elemanlarının maruz kalmadan bir kaynak referans bir örneğidir.

Çağrılan hesaplama sonlandırılana kadar bir alt program çağrısı veya yöntem çağrısı çıkmayacaktır. Asenkron mesaj iletimi ise, aksine, istek mesajı gönderildikten önemli bir süre sonra bir yanıtın gelmesine neden olabilir.

Bir mesaj işleyici, genel olarak, birden fazla göndericiden gelen mesajları işler. Bu, durumunun tek bir göndericinin veya istemci işleminin davranışıyla ilgili olmayan nedenlerle değişebileceği anlamına gelir. Bu, yöntemlerin çağrıldığı bir nesnenin tipik davranışının aksinedir: ikincisinin yöntem çağrıları arasında aynı durumda kalması beklenir. Başka bir deyişle, mesaj işleyici geçici bir nesneye benzer şekilde davranır .

Matematiksel modeller

Mesaj geçişinin öne çıkan matematiksel modelleri, Aktör modeli ve Pi hesabıdır . Matematiksel olarak bir mesaj, kontrolü bir nesneye geçirmenin tek yoludur. Nesne mesaja yanıt veriyorsa, o mesaj için bir yöntemi vardır .

Alan Kay , mesaj iletmenin OOP'deki nesnelerden daha önemli olduğunu ve nesnelerin kendilerinin genellikle aşırı vurgulandığını savundu. Canlı dağıtılmış nesneler programlama modeli bu gözlem üzerine inşa; üst düzey, işlevsel stil belirtimlerini kullanarak, karmaşık bir dağıtılmış sistemin davranışını mesaj kalıpları açısından karakterize etmek için dağıtılmış veri akışı kavramını kullanır .

Örnekler

Ayrıca bakınız

Referanslar

daha fazla okuma

Dış bağlantılar