2010-12-05 18 views
6

एनएसटीएचड और पर्थ्रेड के बीच क्या अंतर है? क्या एनएसटीएचड अपने आंतरिक कार्यान्वयन के रूप में पाथ्रेड का उपयोग करता है और क्या हमें वास्तव में आईएसटी पर पर्याप्त रूप से पर्याप्त होने पर एनएसटीएचड के अतिरिक्त ओवरहेड की आवश्यकता होती है।एनएसटीएचएड वीएस पर्थ्रेड

उत्तर

9

मुझे यह सुनिश्चित नहीं है कि NSThread आंतरिक रूप से pthreads लाइब्रेरी का उपयोग करें। यह शायद करता है, लेकिन चूंकि हमारे पास NSThread के लिए स्रोत कोड नहीं है, इसलिए हम वास्तव में नहीं जानते हैं।

अंतर यह है कि pthread एक सी पुस्तकालय है और NSThread एक ऑब्जेक्टिव-सी पुस्तकालय है। लेकिन वे दोनों एक ही कार्यक्षमता को पूरा करते हैं।

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

+0

एनएसटीएचएड आंतरिक रूप से AFAIK pthreads का उपयोग करता है। हालांकि, थ्रेड प्रबंधन और सिंक्रनाइज़ेशन के लिए अधिक लचीला और शक्तिशाली तंत्र प्रदान कर सकते हैं, जैसे कि एक और थ्रेड समाप्त होने तक प्रतीक्षा करें .. – Andy

+1

मैं किसी दुर्घटना से कुछ कॉल स्टैक देख रहा हूं और यह पठार से भरा है। इसका मतलब यह नहीं होता NSThread pthread का उपयोग करता है, लेकिन यह कह रहा है: '6 \t फाउंडेशन \t __NSThread__start__ + 1024', ' 7 \t libsystem_pthread.dylib \t _pthread_body + 240', '8 \t libsystem_pthread.dylib \t _pthread_body + 282', '9 libsystem_pthread.dylib \t thread_start + 4' –

1

जहां तक ​​मुझे पता है कि एनएसटीएचड पी-धागे का उपयोग नहीं करता है, जब तक कि ऐप्पल ने मूल रूप से चीजों को बदल दिया हो। ओओपीसी की जड़ें पॉज़िक्स मानक के लिए बहुत जल्दी थीं (पठार 1 सी में आया था, जो 1 99 5 में मुझे लगता था)। यह वर्तमान उद्देश्य-सी रनटाइम्स पर आधारित कई आलोचनाओं में से एक है। http://www.jot.fm/issues/issue_2009_01/article4.pdf देखें, हालांकि आप मानक सी पुस्तकालयों के माध्यम से उद्देश्य-सी में pthreads तक पहुंच सकते हैं। हमने वास्तव में इस परियोजना को एक प्रोजेक्ट में बनाया था और लाइब्रेड्स का उपयोग करके निर्मित लाइब्रेरी के साथ बातचीत करते समय मुद्दों में भाग लिया था (यह लगभग NSNotificationQueue के साथ रन लूप था)।

+1

मैं नहीं जानता, लेकिन यह पूरी तरह से प्रशंसनीय है कि NSThread मूल रूप pthreads के अलावा कुछ प्रयोग किया जाता है (ङ .g। मैक थ्रेड एपीआई का सीधा उपयोग)। लेकिन मुझे लगता है कि यह संभावना है कि आज यह वास्तव में pthreads का उपयोग करता है। साक्ष्य:/सिस्टम/लाइब्रेरी/फ्रेमवर्क/फाउंडेशन.फ्रेमवर्क/फाउंडेशन में स्ट्रिंग "एनएसटीएचडी * _एनएसटीएचडीजीटी 0 (pthread_t)" है। एक पठित को एनएसटीएचडी में बदलने के लिए एक अनियंत्रित एपीआई की तरह दिखता है? जिसका अर्थ है कि एनएसटीएचएड शायद एक पाथ्रेड रैपर है (जो बदले में सिर्फ मैच धागे के लिए एक रैपर है) –

+0

मुझे लगता है कि यह पठ्रेड का उपयोग करता है। @ पाब्लो के उत्तर में पोस्ट किए गए कॉल स्टैक देखें। –

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