, onlar reddeder:Akka, JMM benzeri olay öncesi ilişkiyi nasıl uygular? Resmi Akka doc olarak
aktörler üzerinde görünürlük ve yeniden sıralama sorunlarını önlemek için, Akka aşağıdaki iki kural "önce olur" garanti:
aktör kuralı gönderin: ait send Bir aktöre mesaj, o mesajın aynı oyuncu tarafından alınmasından önce olur. Aktör sonraki işlem kuralı: Bir mesajın işlenmesi aynı aktör tarafından bir sonraki mesajın işlenmesinden önce gerçekleşir.
Ayrıntılar için lütfen the doc numaralı telefonu kullanın.
Akka'nın bunu nasıl gerçekleştirdiğini merak ediyorum. Sadece kaynak koddan geçtim (şu anda en son) ve Actor.receive
'u çalıştırmadan önce bir Lock olması gerektiğini düşündüm, ama herhangi bir kilit bulamadım (sanırım). Son olarak, ActorCell.invoke
için bir yorum bulundu:
// Bellek tutarlılık sonra sanırım posta kutusu durumunu
Evet, Mailbox.status
yazma (iletilerini işleme sonra posta kutusu durumunu okuyarak Kutusuna tarafından işlenir Bu, status
alanına erişmek/güncellemek için Unsafe
kullandığını gördü, ancak bunun bellek görünürlüğünü nasıl sağlayacağını anlayamadım ..
Bu actor'un dahili durumları Mailbox.status tarafından korunan anlamına mı geliyor? Evet, –
evet, kesinlikle. –
Teşekkürler Roland! AbstractQueuedSynchronizer'ı inceleyerek, sonunda bunu anlıyorum. –