2008-10-26 5 views
5

एमएसडीएन लेख "Using concurrency for scalability" में जो डफी राज्य करता है कि धागा बनाने की लागत लगभग 200,000 चक्र है, और नष्ट करने की लागत लगभग 100,000 चक्र है।माप थ्रेड व्यय

जब मैं कुछ गणना करने के लिए एक नया धागा बनाने का प्रयास करता हूं, तो मैं यह सुनिश्चित करना चाहता हूं कि गणना 200,000 चक्र से अधिक महंगी हो।

मैं CPU चक्रों को कैसे माप सकता हूं? मुझे लगता है कि निष्पादन समय को मापने से यह अधिक दिलचस्प होगा।

+0

आपको शायद थ्रेड का उपयोग करने की लागत के लिए निर्देश कैश फ्लश प्रभावों की लागत जोड़नी चाहिए। थ्रेड पूल सलाह के लिए – Hugo

उत्तर

2

आप मापने वाले सिस्टम पर न्यूनतम मात्रा में परेशानी के साथ कितने CPU चक्रों का उपभोग कर रहे हैं, इसका माप प्राप्त करने के लिए इंटेल के विट्यून जैसे नमूना प्रोफाइलर का उपयोग कर सकते हैं।

धागे का उपयोग करते समय लक्ष्य लक्ष्य नए धागे की जरूरत से बचने के लिए है। thread pool का उपयोग करने में देखें। यह आपको कार्य आइटम को असीमित रूप से चलाने देगा, लेकिन प्रत्येक आइटम के लिए एक नया धागा उत्पन्न करने के बिना।

+0

मॉड +1! –

+0

धागा पूल सिर्फ मौजूदा धागे को पूल करता है; यदि कोई थ्रेड अभी भी नहीं बनाया गया है तो निर्माण लागत वही है जैसे मैं किसी भी थ्रेड पूल का उपयोग नहीं करता। –

+0

हां, थ्रेड सृजन वही होता है यदि आप इसे करते हैं या थ्रेड पूल करता है। लेकिन धागा पूल कुछ निष्क्रिय निष्क्रिय धागे को रखकर अनावश्यक सृजन से बचने में मदद करता है। यदि आपके काम के सामान सृजन लागत से बचने के लिए काफी छोटे हैं तो वे थ्रेडपूल के लिए उपयुक्त फिट की तरह लगते हैं। –

1

मैं सिस्टम को देखता हूं। डायग्नोस्टिक नामस्थान। इसमें स्मृति और सीपीयू उपयोग को ट्रैक करने पर बहुत सारी चीज़ें हैं।

0

मैं एक बारीकी से संबंधित प्रश्न पूछा कुछ दिनों के पहले, और अभी तक कोड का वास्तविक सीपीयू चक्र उपयोग को मापने का तरीका नहीं मिला है: Limiting assembly execution number of cpu cycles

आपके मामले में, आप एक रूपरेखा नहीं चला सकते हैं गणना के बारे में और देखें कि एक गणना कितनी बार लेती है, और इसकी गणना उस थ्रेड को बढ़ाने के कुल समय तक की जाती है जो गणना करता है और उसके बाद थ्रेड को बाद में मार देता है?

0

यहां CPU चक्रों की गणना करने में समस्या है। अलग-अलग CPU एक ही निर्देश को लागू करने के लिए चक्रों की भिन्न संख्या लेते हैं। तो यह एक मीट्रिक आईएमओ बहुत विश्वसनीय नहीं है। मुझे लगता है कि आपको मापने के लिए क्या समय निकालना चाहिए, और .NET में, आप इसे पूरा करने के लिए System.Environment.TickCount का उपयोग करते हैं। मुझे लगता है कि यह आपके पास सबसे अच्छा है ...