2012-06-19 29 views
5

मेरे पास नेटी ऐप है, जहां मैं एक चैनल में एक से अधिक धागे लिखना चाहता हूं। मैं बस सोच रहा था कि चैनल। लिखित थ्रेड सुरक्षित है या नहीं?नेटी चैनल .write धागा सुरक्षित है?

+0

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

+0

मुझे नहीं पता, मैं गलत हो सकता हूं। लेकिन यह http://lists.jboss.org/pipermail/netty-users/2008-November/000045.html आपके द्वारा उद्धृत धागे में टिप्पणियों का विरोध करता प्रतीत होता है। –

+1

फिर, जो आपने लिंक किया है वही बात कहता है, और आपके प्रश्न का उत्तर देता है। Channel.write थ्रेड-सुरक्षित है। –

उत्तर

2

यह धागा सुरक्षित है इसलिए आपको चिंता करने की आवश्यकता नहीं है।

0

नहीं, यह थ्रेड-असुरक्षित है, क्योंकि Channel.writeChannelOutboundBuffer.addMessage को इसकी पाइपलाइन के हेडकॉन्टेक्स्ट में कॉल करता है, और ChannelOutboundBuffer.addMessage निश्चित रूप से थ्रेड-असुरक्षित है।

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

तो आपके पास किसी भी समय चैनल.write को कॉल करने वाले सबसे थ्रेड पर होना चाहिए। कोड के प्रारूप में कुछ गड़बड़ है, आप इसे http://netty.io/4.0/xref/index.html – yuguoliang

+0

पर पा सकते हैं, मैं आपके दावे की पुष्टि करने में सक्षम नहीं हूं। मैं देखता हूं कि 'सारChannel.write' कॉल' Pipeline.write', जो अंततः उस चैनल के लिए ईवेंट लूप प्राप्त करने के बाद 'AbstractUnsafe.write' को कॉल करता है। इस विधि के अंदर एक जोर है कि थ्रेड इवेंट लूप के अंदर है, इसलिए इसे केवल एक समय में 1 थ्रेड द्वारा ही बुलाया जा सकता है – Ferrybig

3

आप कोड से देख सकते हैं, ChannelOutboundBuffer.addMessage() विधि ही सुरक्षित थ्रेड नहीं है: इस कोड पर एक नज़र डालें। हालांकि, लेखन चैनल "थ्रेड सुरक्षित" है क्योंकि नेटटी एकल I/O थ्रेड में लेखन कार्य/विधि निष्पादित करता है।