2012-06-19 34 views
5

Bir kanala yazacak birden fazla ileti dizisine sahip olmak istediğim bir Netty uygulamasına sahibim. Sadece Channel.write iş parçacığı güvenli olup olmadığını merak ediyordum?Netty Channel.write iş parçacığı güvenli mi?

+0

http://stackoverflow.com/a/10702210/828625 –

+0

Bilmiyorum, yanılıyor olabilirim. Ancak bu http://lists.jboss.org/pipermail/netty-users/2008-November/000045.html, alıntı yaptığınız konudaki sözleriyle çelişiyor. –

+1

Yine, bağladığınız şey aynı şeyi söylüyor ve sorunuzu cevaplıyor. Channel.write iş parçacığı güvenlidir. –

cevap

2

Bu iş parçacığı güvenlidir, bu nedenle endişelenmeniz gerekmez.

0

Hayır, iş parçacığının güvensiz olması nedeniyle, Channel.write, boru hattının HeadContext'inde ChannelOutboundBuffer.addMessage ve ChannelOutboundBuffer.addMessage kesinlikle iş parçacığı için güvenli değildir. kod görebileceğiniz gibi

public void addMessage(Object msg, int size, ChannelPromise promise) { 
    Entry entry = Entry.newInstance(msg, size, total(msg), promise); 
    if (tailEntry == null) { 
     flushedEntry = null; 
     tailEntry = entry; 
    } else { 
     Entry tail = tailEntry; 
     tail.next = entry; 
     tailEntry = entry; 
    } 
    if (unflushedEntry == null) { 
     unflushedEntry = entry; 
    } 

    // increment pending bytes after adding message to the unflushed arrays. 
    // See https://github.com/netty/netty/issues/1619 
    incrementPendingOutboundBytes(size, false); 
} 
+1

böylece herhangi bir zamanda Channel.write çağıran en fazla bir iş parçacığına sahip olmalısınız. Kodun biçimi ile ilgili bir sorun var, http://netty.io/4.0/xref/index.html – yuguoliang

+0

adresinden bu talebinizi doğrulayamıyorum. Bu kanal için olay döngüsünü aldıktan sonra 'AbstractUnsafe.write' olarak adlandırılan' AbstractChannel.write' '' Pipeline.write''ı çağırdığını görüyorum. Bu yöntemin içinde, iş parçacığı olay döngüsünün içinde olduğunu iddia eder, böylece yalnızca bir kerede yalnızca 1 iş parçacığıyla çağrılabilir – Ferrybig

3

, ChannelOutboundBuffer.addMessage() yöntem kendisi parçacığı güvenli değil: Bu kod bir bakın. Bununla birlikte, yazma kanalı "iş parçacığı güvenli" dir, çünkü netty tek G/Ç iş parçasındaki yazma görevini/yöntemini çalıştırır.

İlgili konular