2010-08-24 15 views
8

मैं सिर्फ एक टर्ननाडो एप्लिकेशन पर काम करना शुरू कर रहा हूं जिसमें कुछ सीपीयू मुद्दे हैं। CPU समय 100% पर CPU को अधिकतम करने के साथ-साथ समय-समय पर बढ़ने के साथ ही बढ़ेगा। सिस्टम वर्तमान में मुख्य धागे को अवरुद्ध करने के लिए डिज़ाइन नहीं किया गया है। अगर इसे कुछ ऐसा करने की ज़रूरत है जो ब्लॉक और एसिंक्रोनस ड्राइवर उपलब्ध नहीं हैं, तो यह ब्लॉकिंग ऑपरेशन करने के लिए एक और धागा उत्पन्न करेगा।मैं उचित चेक अंतराल कैसे निर्धारित करूं?

इस प्रकार हमारे पास मुख्य धागा लगभग पूरी तरह से सीपीयू-बाउंड और अन्य धागे का एक गुच्छा है जो लगभग पूरी तरह से आईओ-बाउंड हैं। मैंने जो पढ़ा है, उससे जीआईएल के साथ समस्याओं में भाग लेने का यह सही तरीका प्रतीत होता है। इसके अलावा, मेरी प्रोफाइलिंग से पता चलता है कि हम सिग्नल पर इंतजार कर रहे बहुत समय व्यतीत कर रहे हैं (जो मुझे लगता है कि __semwait_signal कर रहा है), जो जीआईएल की सीमित समझ में होने वाले प्रभावों के अनुरूप है।

यदि मैं चेक अंतराल 300 पर सेट करने के लिए sys.setcheckinterval का उपयोग करता हूं, तो CPU वृद्धि में काफी कमी आती है। मैं यह निर्धारित करने की कोशिश कर रहा हूं कि क्या मुझे चेक अंतराल बढ़ाना चाहिए, इसे 300 पर छोड़ दें, या इसे ऊपर उठाने से डरें। आखिरकार, मैंने देखा कि सीपीयू प्रदर्शन बेहतर हो जाता है, लेकिन मैं थोड़ा चिंतित हूं कि इससे सिस्टम की प्रतिक्रिया पर नकारात्मक प्रभाव पड़ेगा।

बेशक, सही उत्तर शायद यह है कि हमें जीआईएल को ध्यान में रखने के लिए हमारे वास्तुकला पर पुनर्विचार करना होगा। लेकिन यह ऐसा कुछ नहीं है जिसे तुरंत किया जा सके। तो मैं अल्पकालिक में लेने के लिए उचित कार्रवाई का तरीका कैसे निर्धारित करूं?

उत्तर

1

पहली चीज़ जो मैं जांचूँगा यह सुनिश्चित करना होगा कि आप धागे से बाहर निकल रहे हैं। यह जानने के लिए बहुत मुश्किल है कि आपके विवरण से क्या चल रहा है, लेकिन आप "monotonically" शब्द का उपयोग करते हैं, जिसका अर्थ है कि CPU उपयोग लोड करने के बजाय समय से बंधे हैं।

आप पाइथन की थ्रेडिंग सीमाओं में बहुत अच्छी तरह से चल रहे हैं, लेकिन यह भार (सक्रिय धागे की संख्या,) और सीपीयू उपयोग (संदर्भ स्विचिंग लागत) के साथ ऊपर और नीचे भिन्न होना चाहिए क्योंकि उन धागे से बाहर निकलना चाहिए। क्या एक बार धागे के लिए कोई कारण है, एक बार बनाया गया है, हमेशा के लिए जीने के लिए? यदि ऐसा है, तो पुनर्चक्रण को प्राथमिकता दें। अन्यथा, अल्पकालिक यह पता लगाना होगा कि क्यों CPU उपयोग समय से बंधे हैं और लोड नहीं होते हैं। इसका तात्पर्य है कि प्रत्येक नए धागे में आपके सिस्टम में स्थायी, अपरिवर्तनीय लागत होती है - जिसका अर्थ यह कभी नहीं निकलता है।

+0

मैं सकारात्मक हूं कि धागे ठीक से निकल रहे हैं। इसके अलावा, मैं लोड के तहत कुछ प्रदर्शन अंतर देख रहा हूँ। यह सिर्फ इतना है कि लोड सीपीयू समय तेजी से बढ़ने का कारण बनता है। –

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