मैं सिर्फ एक टर्ननाडो एप्लिकेशन पर काम करना शुरू कर रहा हूं जिसमें कुछ सीपीयू मुद्दे हैं। CPU समय 100% पर CPU को अधिकतम करने के साथ-साथ समय-समय पर बढ़ने के साथ ही बढ़ेगा। सिस्टम वर्तमान में मुख्य धागे को अवरुद्ध करने के लिए डिज़ाइन नहीं किया गया है। अगर इसे कुछ ऐसा करने की ज़रूरत है जो ब्लॉक और एसिंक्रोनस ड्राइवर उपलब्ध नहीं हैं, तो यह ब्लॉकिंग ऑपरेशन करने के लिए एक और धागा उत्पन्न करेगा।मैं उचित चेक अंतराल कैसे निर्धारित करूं?
इस प्रकार हमारे पास मुख्य धागा लगभग पूरी तरह से सीपीयू-बाउंड और अन्य धागे का एक गुच्छा है जो लगभग पूरी तरह से आईओ-बाउंड हैं। मैंने जो पढ़ा है, उससे जीआईएल के साथ समस्याओं में भाग लेने का यह सही तरीका प्रतीत होता है। इसके अलावा, मेरी प्रोफाइलिंग से पता चलता है कि हम सिग्नल पर इंतजार कर रहे बहुत समय व्यतीत कर रहे हैं (जो मुझे लगता है कि __semwait_signal
कर रहा है), जो जीआईएल की सीमित समझ में होने वाले प्रभावों के अनुरूप है।
यदि मैं चेक अंतराल 300 पर सेट करने के लिए sys.setcheckinterval
का उपयोग करता हूं, तो CPU वृद्धि में काफी कमी आती है। मैं यह निर्धारित करने की कोशिश कर रहा हूं कि क्या मुझे चेक अंतराल बढ़ाना चाहिए, इसे 300 पर छोड़ दें, या इसे ऊपर उठाने से डरें। आखिरकार, मैंने देखा कि सीपीयू प्रदर्शन बेहतर हो जाता है, लेकिन मैं थोड़ा चिंतित हूं कि इससे सिस्टम की प्रतिक्रिया पर नकारात्मक प्रभाव पड़ेगा।
बेशक, सही उत्तर शायद यह है कि हमें जीआईएल को ध्यान में रखने के लिए हमारे वास्तुकला पर पुनर्विचार करना होगा। लेकिन यह ऐसा कुछ नहीं है जिसे तुरंत किया जा सके। तो मैं अल्पकालिक में लेने के लिए उचित कार्रवाई का तरीका कैसे निर्धारित करूं?
मैं सकारात्मक हूं कि धागे ठीक से निकल रहे हैं। इसके अलावा, मैं लोड के तहत कुछ प्रदर्शन अंतर देख रहा हूँ। यह सिर्फ इतना है कि लोड सीपीयू समय तेजी से बढ़ने का कारण बनता है। –