2009-10-06 14 views
20

मैं द्वाराएक कार्यकर्ता धागा और मेरे द्वारा बनाए गए थ्रेड से इसका अंतर क्या है?

Thread newThread= new Thread(DoSomeWork); 

. 
. 
. 
private void DoSomeWork() 
{ 
} 

यह एक कार्यकर्ता धागे से किसी भी अलग है एक धागा बनाने के? यदि यह है ... जो बेहतर है और मुझे कार्यकर्ता धागे का उपयोग कब करना चाहिए? मेरे आवेदन में निगरानी करने, ताज़ा करने के लिए बहुत सारे धागे की आवश्यकता है ..

+1

क्या आप सुनिश्चित हैं कि आपके एप्लिकेशन को बहुत सारे थ्रेड की आवश्यकता है? तथ्य यह है कि आप इस सवाल से पूछ रहे हैं, सुझाव देता है कि आपको थ्रेडिंग को कम करने की कोशिश करनी चाहिए ... –

+0

मुझे क्या करना चाहिए: मेरी आवश्यकताएं 1) एक सॉकेट पढ़ें और फ़ाइल में लिखें और डीबी 2 में मान डालें 2) निगरानी रखें डीबी और यूआई स्क्रीन में लगातार रीफ्रेश किए गए मान (या नए डाले गए मान) प्रदर्शित करते हुए –

+0

टीजे, यदि आप टैग में प्लेटफार्म (सी #, जावा) इंगित करते हैं तो यह मदद कर सकता है। –

उत्तर

20

आम तौर पर टर्म वर्कर थ्रेड का उपयोग किसी अन्य धागे का वर्णन करने के लिए किया जाता है जो वर्तमान धागे पर काम कर रहा है - जिसमें कई मामलों में एक है अग्रभूमि या यूआई धागा। हालांकि यह पत्थर में नहीं डाला गया है।

विंडोज प्रोग्राम आमतौर पर यूआई को प्रबंधित करने के लिए एक प्राथमिक थ्रेड का उपयोग करते हैं और यह आम तौर पर सिंक्रोनस होता है (यानी चीजें एक के बाद एक चलती हैं)। यदि इस प्रकार के कार्यक्रमों में यूआई ब्लॉक बनाने से बचने के लिए प्रदर्शन करने के लिए एक लंबा चलने वाला कार्य है, तो आप काम करने के लिए एक कार्यकर्ता धागा (जो या तो अग्रभूमि धागा या पृष्ठभूमि धागा हो सकता है) का उपयोग करें (प्राथमिक थ्रेड के लिए असीमित रूप से) , और फिर परिणामों को वापस लेने के लिए प्राथमिक थ्रेड पर प्रस्तुत करें।

विंडोज प्रोग्राम में यह संदेशों के माध्यम से किया जाता है। यदि आप .NET फ्रेमवर्क जैसे विशेष पुस्तकालयों का उपयोग करते हैं, तो पृष्ठभूमि या वर्कर थ्रेड हैंडलिंग को आसान बनाने के लिए थ्रेडपूल और पृष्ठभूमिवर्कर जैसे विशेष उपयोगिता वर्ग उपलब्ध हैं। लेकिन हमेशा के रूप में आप एक ही अंत प्राप्त करने के लिए मंच primitives का उपयोग कर सकते हैं।

+0

'विंडोज़ प्रोग्राम में यह संदेशों के माध्यम से किया जाता है।' काफी नहीं। यदि आपका विंडोज प्रोग्राम मुख्य थ्रेड में कुछ लंबा ऑपरेशन करता है, तो यह उस ऑपरेशन की अवधि के लिए संदेशों को अवरुद्ध कर देगा जब तक कि आप कुछ फ़ंक्शंस (जैसे 'WaitForSingleObject()' और 'PeekMessage() ') को लूप में इसके चारों ओर पाने के लिए कॉल करते हैं । (देखें [यह उत्तर] (http://stackoverflow.com/questions/831265/i-need-a-message-pump-that-doesnt-mess-up-my-open-window/835781#835781) यदि आप चाहते हैं उस तकनीक का उपयोग करने के लिए।) उन लंबी प्रक्रियाओं को करने के लिए धागे को फैलाने से आप उन लूपों को करने से बच सकते हैं। – RobH

+0

आपने गलत समझा। अंतिम अनुच्छेद इस बारे में है कि कैसे प्राथमिक ** यूआई ** (जो निम्नतम स्तर पर विंडोज संदेशों को पंप करेगा) थ्रेड माध्यमिक से या वास्तव में स्वयं से सूचित किया जाता है। यह प्राथमिक धागे पर मल्टीटास्किंग करने के तरीके के बारे में नहीं है। यूआई थ्रेड को अवरुद्ध करने से बचने के लिए द्वितीयक धागे का राजन डी एट्रे अनुच्छेद 2 के अनुसार है। –

7

मैं केवल शब्दावली के अलावा अन्य तकनीकी अंतर नहीं सोच सकता।

श्रमिक थ्रेड को इसलिए बुलाया जाता है क्योंकि वे कुछ नौकरी आने की प्रतीक्षा कर रहे हैं और किसी और द्वारा सौंपा गया काम करते हैं। उदाहरण के लिए, एक वेब सर्वर प्रक्रिया अनुरोध प्राप्त करती है और प्रसंस्करण के लिए अपने पूल से धागे को असाइन करती है। वह धागा प्रक्रिया का पालन करता है और काम खत्म करता है और पूल पर वापस लौटता है। तब तक मुख्य धागा कुछ और कर रहा होगा।

आपके उद्देश्य के लिए: अद्यतन डीबी निरंतर अद्यतन/नए मानों की पहचान के लिए आवश्यक है। यह सिर्फ एक थ्रेड हो सकता है, हमेशा पृष्ठभूमि में चल रहा है, समय-समय पर जागता है और डीबी से यूआई में मानों को अपडेट करता है।

10

मैं अवधारणा को सरल तरीके से समझाने की कोशिश कर रहा हूं, उम्मीद है कि यह कार्यकर्ता थ्रेड अवधारणा को बेहतर ढंग से समझने में मदद करेगा।

जनरल परिभाषा: -

ए 'कार्यकर्ता सूत्र "सिर्फ एक धागा जो मालिक के लिए और अद्यतन काम परिणाम (हम" ग्राहक "यह कॉल कर सकते हैं) अपने बॉस के आदेश पर कुछ पृष्ठभूमि काम को करने के चलाता है।

तकनीकी परिभाषा: -

एक कार्यकर्ता धागा आमतौर पर एक धागा है कि ग्राहकों के अनुरोध पर सक्रिय हो जाता है के रूप में परिभाषित किया गया है।

उदाहरण 1:

1- हम पिज्जा की दुकान है, जहां 10 लोग हैं, जो एक स्वादिष्ट पिज्जा तैयार करने में विशेषज्ञ हैं देखते हैं। इन्हें "कार्यकर्ता धागे" कहा जाता है।

2- हमारे पास एक ऐसा व्यक्ति है जो ग्राहकों से ऑर्डर प्राप्त करता है। उस आदमी को "ग्राहक" कहा जाता है। जब भी कोई नया ऑर्डर आता है, तो "वर्कर थ्रेड" में से एक पिज्जा तैयार करने और पिज्जा तैयार होने के बाद ग्राहक को अपडेट करना शुरू कर देता है।

3- जब 10 से कम आदेश होते हैं, तो कुछ कर्मचारी बस आदर्श बैठते हैं।

4- जब 10 से अधिक ऑर्डर होते हैं, तो आदेश केवल प्रतीक्षा कतार में डाल दिए जाते हैं।

उदाहरण 2:

1- एक अनुप्रयोग सर्वर है कि बंदरगाह को सुनता है 8080.

2- एक अनुरोध 8080.

3- एक श्रोता धागा (यह कहा जाता है बंदरगाह पर में आता है "क्लाइंट" के रूप में) उस अनुरोध को लेता है और इसे "कार्यकर्ता थ्रेड" पर भेजता है जो अनुरोध को पूरा करता है। वास्तव में ऐप सर्वर पर "वर्कर थ्रेड" का एक पूल बनाए रखा गया है ("वर्कर थ्रेड" प्रोग्राम की कई वस्तुएं)।

4- यदि दो अनुरोध एक ही समय में आते हैं, तो दो कार्यकर्ता धागे आवंटित किए जाते हैं और कार्य एक साथ निष्पादित किया जाता है।

संबंधित मुद्दे