मेरे पास एक पेंटियम कोर i5 प्रोसेसर है, जिसमें 4 कोर हैं। अगर मैं C # कंसोल प्रोग्राम में ऐसा करता हूं
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
क्या अलग कोर पर चलने के लिए t1 और t2 धागे की गारंटी है?
मेरे पास एक पेंटियम कोर i5 प्रोसेसर है, जिसमें 4 कोर हैं। अगर मैं C # कंसोल प्रोग्राम में ऐसा करता हूं
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
क्या अलग कोर पर चलने के लिए t1 और t2 धागे की गारंटी है?
जवाबों:
आप .Net में गारंटी नहीं दे सकते कि Thread
दो अलग-अलग कोर पर दो एस चलाते हैं। वास्तव में, आप यह भी गारंटी नहीं दे सकते कि कोई Thread
केवल एक कोर (!) पर चलेगा ।
ऐसा इसलिए है क्योंकि प्रबंधित थ्रेड OS थ्रेड्स के समान नहीं हैं - एक एकल प्रबंधित थ्रेड इसका समर्थन करने के लिए कई OS थ्रेड्स का उपयोग कर सकता है। C # में, आप केवल सीधे प्रबंधित Thread
s के साथ सौदा करते हैं (कम से कम, WinAPI थ्रेडिंग फ़ंक्शन को कॉल करने के लिए पी / आह्वान का सहारा लिए बिना, जो आपको कभी नहीं करना चाहिए) ।
हालाँकि, .Net और Windows थ्रेड शेड्यूलर्स वे जो करते हैं, उसमें बहुत अच्छे हैं - वे एक ही कोर पर दो धागे नहीं चलाएंगे, जबकि दूसरा कोर पूरी तरह से बेकार बैठता है। तो, सामान्य तौर पर, आपको इसके बारे में चिंता करने की आवश्यकता नहीं है।
Thread
रों हैं ओएस धागे। लेकिन यही कारण है कि कोई भी गारंटी नहीं है कि एक ही धागा हमेशा एक ही कोर पर निष्पादित होगा।
async
कीवर्ड (जो मैं क्या मान लें कि आपके, के बारे में बात कर रहे हैं के रूप में "async धागे 'अनावश्यक है) एक प्रयोग करने के लिए सिर्फ वाक्य-चीनी है BackgroundWorker
धागा है, जो किसी भी अन्य नेट धागे की तरह है - आप नहीं गारंटी है कि यह एक पर चलेगा कि क्या कर सकते हैं अलग कोर या नहीं।
नहीं, ओएस और सीपीयू तय करेगा कि क्या और कब चलना है। अन्य कार्यों के बहिष्कार के लिए आपके द्वारा दिखाए गए सरल उदाहरण में, हाँ, जो अलग-अलग कोर पर समानांतर रूप से चलेंगे, लेकिन शायद ही कोई गारंटी होगी कि ऐसा ही होगा।
आप किसी दिए गए धागे को कोर के आवंटन पर कुछ नियंत्रण लेने का प्रयास करने के लिए थ्रेड एफिनिटी का उपयोग कर सकते हैं ।
इसके अलावा डेक को स्टैक करने के लिए शेड्यूलिंग प्राथमिकताओं पर विचार करें , जिसमें धागे पूरी तरह से समानांतर होने चाहिए, और जो इंतजार कर सकता है।
t1
औरt2
एक अनियंत्रित क्रम में अलग-अलग समय पर निष्पादित किया जाता है (जैसे कि यह संभवt2
है किt1
कुछ मॉडलों में पहले शुरू होता है )।