मैं कुछ कोड लिख रहा हूं जो कुछ धागे पैदा करता है (इस समय लगभग 512, लेकिन भविष्य में यह अधिक हो सकता है)। प्रत्येक धागे केवल कुछ ही संचालन करता है, इसलिए मैं ओवरहेड चाहता हूं कि धागे को सिस्टम पर न्यूनतम रखा जाए।सुरक्षित धागा ढेर आकार?
मैं pthread_attr_setstacksize()
का उपयोग करके स्टैक आकार सेट कर रहा हूं, और मुझे PTHREAD_STACK_MIN
से न्यूनतम स्वीकार्य स्टैक आकार मिल सकता है। लेकिन मेरा सवाल है: क्या थ्रेड स्टैक आकार के लिए PTHREAD_STACK_MIN
का उपयोग करना सुरक्षित है? मैं गणना करने के बारे में कैसे जा सकता हूं कि मुझे कितना ढेर चाहिए? क्या कोई छुपा ओवरहेड है जो मुझे अपनी गणना में जोड़ना होगा?
इसके अलावा, क्या कोई अन्य तकनीक है जिसका उपयोग मैं सिस्टम पर धागे के बोझ को कम करने के लिए कर सकता हूं?
धन्यवाद मैट। मुझे लगता है कि यह जवाब के करीब है जो मैं बाद में था। मुझे उम्मीद थी कि किसी को कहने के लिए "ऊपर sizeof() अपने सभी स्थानीय चर के जोड़ने के लिए, धागा भूमि के ऊपर के लिए 42 बाइट्स जोड़ने और फिर अच्छे भाग्य के लिए 10% जोड़ें" जा रहा था, लेकिन ऐसा लगता है कि संभावित रूप में बहुत अधिक कारक हैं कि खेलने पर। प्राथमिकताओं और निलंबन पर युक्तियों के लिए धन्यवाद। –
@ ltn100: नहीं, यह अधिक "। अच्छी तरह से एक डिबग संदर्भ में जो अतिप्रवाह की पहचान करेगा, एक निर्दिष्ट ढेर आकार के साथ अपने कोड का परीक्षण फिर अच्छे भाग्य के लिए 10% जोड़ने" की तरह है। –
@ ltn100: यदि आप एक डिबग उपकरण है जो वास्तव में अपने मंच पर उच्च पानी मार्क स्टैक उपयोग उपायों मिलता है, तो यह अच्छी बात है, लेकिन प्लेटफार्मों जहां आप वास्तव में यह करने के लिए (क्योंकि ढेर सामने शारीरिक रैम है) की जरूरत नहीं जरूरी हैं सर्वश्रेष्ठ डीबगिंग उपकरण वाले वाले। और आपको परीक्षण के साथ वास्तव में * पूरी तरह से होना चाहिए। किसी भी छोटी सी चीज, जिसमें आप जिन पुस्तकालयों के लिए गतिशील रूप से लिंक करते हैं, या वे पर्यावरण चर वे देखते हैं, या (शाब्दिक रूप से) सप्ताह के दिन, आपके उच्च-पानी के निशान को बढ़ा सकते हैं। वीएलए से बचें, इनपुट डेटा पर निर्भर किसी भी रिकर्सन से बचें। –