2012-11-27 23 views
7

मुझे आश्चर्य है कि 'थ्रेड्स' और 'PTHREAD' विकल्पों के बीच अलग-अलग क्या है जब मैं फ्रीब्स में पोर्ट स्रोत से 5.16 (और अन्य संस्करण) संकलित करता हूं?थ्रेड बनाम pthread perl

क्या PTHREAD पॉज़िक्स-थ्रेडिंग है? (क्योंकि -पिथ्रेड) और यदि हां, तो क्या यह 'थ्रेड' को पसंद किया गया है? (क्योंकि यह preelected लगता है) यहां तक ​​कि freebsd पर भी? और दूसरी तरफ 'थ्रेड्स' (कर्नेल धागे?) क्या है? पक्ष और विपक्ष क्या होते हैं?

क्या मैं एक इंस्टॉलेशन में दोनों का उपयोग कर सकता हूं? क्या यह समझदार है?

जहां तक ​​मैं देख सकता हूं, पेर्ल के साथ संयोजन में खोजने के लिए बहुत कुछ नहीं है। के रूप में दूसरों निश्चित रूप से यह वर्णन किया है

बहुत बहुत शुक्रिया जिमी

+0

hum ... पर्ल में केवल एक थ्रेडिंग मॉडल ('-Dusethreads') – ikegami

+0

हम्म है :) ठीक है 'थ्रेड्स' के साथ इसे संकलित करने से कॉन्फ़िगर होता है -Dusethreads = n से -Dusethreads = y। 'PTHREADS' ldflags में '-pthread' जोड़ता है। तो, मुझे लगता है कि यह सिर्फ मजाक नहीं कर रहा है। यह एक फर्क पड़ता है, लेकिन मुझे आश्चर्य है कि क्या ?! :/ –

+1

पर्ल थ्रेडिंग का एक अलग मॉडल होता था। यह बहुत टूटा हुआ था। आप शायद उस तक पहुंचने की कोशिश कर रहे हैं। – ikegami

उत्तर

17

धागे का उपयोग करना है।

पर्थ्रेड के साथ लिंक का अर्थ है कि आपका पर्ल -पीथ्रेड ध्वज के साथ बनाया गया है। इसका एक सूक्ष्म लेकिन महत्वपूर्ण प्रभाव है। इसका मतलब है कि जब perl शुरू होता है, तो libc डेटा जो धागे के लिए राज्य को बनाए रखता है प्रारंभ होता है। इसका अर्थ यह है कि यदि आपका perl थ्रेड होने वाली लाइब्रेरी पर dlopen() को कॉल करता है, तो यह लटकने की बजाए ठीक से काम करेगा।

पीएस। मैं वास्तव में वह व्यक्ति हूं जिसने पोर्ट को PTHREAD विकल्प लिखा और प्रतिबद्ध किया। मैंने वास्तव में कुछ पर्ल मॉड्यूल खोजे जो dlopen() 'कुछ थ्रेडेड libs डी और लटकने के लिए perl कारण। मुझे पता लगाने के लिए थोड़ी देर लग गई। मेरा विश्वास करो, आप PTHREAD विकल्प चाहते हैं। मैं वास्तव में इसे बंद करने के विकल्प को हटाने का विचार कर रहा हूं। अधिक जानकारी के लिए, फ्रीबीएसडी पीआर 163512 और 163878 देखें। हमें शायद इस विकल्प को अपस्ट्रीम को धक्का देना चाहिए ताकि पेर्ल इसे फ्रीबीएसडी पर डिफ़ॉल्ट रूप से उपयोग कर सके। कुछ भी जो dlopen() को कॉल कर सकता है वास्तव में -pthread के साथ बनाया जाना चाहिए।

+0

मैं बस तुमसे प्यार करता हूँ!और हां, आपने जो उल्लेख किया है और संदर्भित किया है, उसके संबंध में, यह सिर्फ डिफ़ॉल्ट बनाने के लिए एक अच्छा विचार है। एक बार फिर धन्यवाद! –

+0

इस स्पष्टीकरण के लिए धन्यवाद। मैंने हमेशा pthreads के साथ perl लिंक करने का प्रस्ताव किया: https://rt.perl.org/Public/Bug/Display.html?id=122906 –