मैं जाने के पैकेज "रनटाइम" के बारे में पढ़ रहा हूं और देख सकता हूं कि मैं अन्य (func GOMAXPROCS (n int)) के बीच कर सकता हूं, जो मेरे प्रोग्राम को चलाने के लिए उपयोग की जा सकने वाली CPU इकाइयों की संख्या सेट कर सकता है। क्या मैं अपनी पसंद के एक विशिष्ट सीपीयू पर एक गोरौटाइन चलाने के लिए मजबूर कर सकता हूं?क्या एक विशिष्ट सीपीयू पर चलने के लिए एक नियमित दिनचर्या को मजबूर करना संभव है?
उत्तर
आधुनिक जाओ में, मैं goroutines को दक्षता के लिए धागे को लॉक नहीं करता। 1.5 added goroutine scheduling affinity, to minimize how often goroutines switch between OS threads पर जाएं। और सीपीयू के बीच शेष माइग्रेशन की किसी भी लागत को कर्नेल मोड में संदर्भ स्विच से परहेज करने वाले उपयोगकर्ता-मोड शेड्यूलर के लाभ के खिलाफ वजन घटाना होगा। अंत में, लागतों को स्विच करते समय एक वास्तविक समस्या होती है, कभी-कभी एक बेहतर फोकस आपके प्रोग्राम तर्क को बदल रहा है, इसलिए इसे अलग-अलग काम करने की बजाय काम के बैचों को संचारित करके कम स्विच करने की आवश्यकता है।
लेकिन उन सभी पर विचार करने पर भी, कभी-कभी आपको केवल एक goroutine लॉक करना पड़ता है, जैसे कि जब सी एपीआई की आवश्यकता होती है, और मुझे लगता है कि यह मामला नीचे है।
पूरे कार्यक्रम GOMAXPROCS=1
, तो it's relatively simple to set a CPU affinity by calling out to the taskset utility from the schedutils package साथ चलाता है।
मैंने सोचा था कि GOMAXPROCS > 1
पर goroutines are migrated between OS threads at runtime पर भाग्य से बाहर थे। वास्तव में, जेम्स हेनस्ट्रिज बताते हैं कि आप अपने goroutine माइग्रेटिंग से रखने के लिए runtime.LockOSThread()
का उपयोग कर सकते हैं। एक बार जब आप इसे गोरौटाइन लॉक कर लेते हैं, तो मुझे वर्तमान थ्रेड के सीपीयू एफ़िनिटी को सेट करने के लिए किसी भी गो स्टडीलिब फ़ंक्शन के बारे में पता नहीं है। आप Go uses pthreads in cgo mode स्पष्ट रूप से, कागो का उपयोग करने और pthread_setaffinity_np
पर कॉल करने में सक्षम हो सकते हैं। चूंकि हम सिस्टम कॉल के बारे में बात कर रहे हैं, विवरण ओएस द्वारा अलग-अलग होंगे।
हालांकि आप एक रन ओएस थ्रेड को 'रनटाइम.लॉकऑस्टह्रेड' के साथ लॉन्च कर सकते हैं। लक्ष्य को प्राप्त करने के लिए अंतर्निहित ओएस सीपीयू एफ़िनिटी रूटीन के साथ इसका उपयोग किया जा सकता है। –
ओह, धन्यवाद! अद्यतन कर रहा है। – twotwotwo
अपने पर निर्भर करता है (यदि आपके पूरे कार्यक्रम शुद्ध जाओ (कोई सी में जुड़ा हुआ है), यह syscall
मॉड्यूल के माध्यम से एक शून्य pid
पैरामीटर के साथ sched_setaffinity
कॉल करने के लिए काम कर सकते हैं। लेकिन वह मुश्किल हो जा रहा है। है) वर्कलोड, लेकिन कभी-कभी प्रति CPU प्रक्रिया जाने के लिए फायदेमंद होता है, gomaxprocs को 1 पर सेट करें और प्रक्रिया को सीपीयू को टास्कसेट के साथ पिन करें।
- उपयोग reuseport श्रोता: यहाँ भयानक fasthttp पुस्तकालय से उस विषय पर एक अंश है।
- GOMAXPROCS = 1 के साथ प्रति सीपीयू कोर पर एक अलग सर्वर उदाहरण चलाएं।
- taskset का उपयोग कर प्रत्येक सर्वर उदाहरण को एक अलग CPU कोर पर पिन करें।
- सुनिश्चित करें कि मल्टीक्यू नेटवर्क कार्ड के इंटरप्ट्स को सीपीयू कोर के बीच समान रूप से वितरित किया जाता है। विवरण के लिए this article देखें।
- गो 1.6 का उपयोग करें क्योंकि यह कुछ उल्लेखनीय प्रदर्शन सुधार प्रदान करता है।
स्रोत: https://github.com/valyala/fasthttp#performance-optimization-tips-for-multi-core-systems
- 1. क्या यह एक कॉलल सबराउटिन के लिए अपने कॉलर को वापस करने के लिए मजबूर करना संभव है?
- 2. प्रोग्राम पर चलने वाले कार्यक्रम को ट्रिगर करना संभव है?
- 3. क्या विलंब के बिना वार्तालाप इतिहास को सहेजने के लिए Lync को मजबूर करना संभव है?
- 4. एक सीपीयू
- 5. ईएलएफ फ़ाइल के शीर्ष पर एक प्रतीक को मजबूर करना
- 6. क्या ब्राउज़र को हैश के साथ एक ही पृष्ठ को फिर से लोड करने के लिए मजबूर करना संभव है?
- 7. क्या मैं संकलक को एक विशिष्ट विधि को अनुकूलित करने के लिए मजबूर कर सकता हूं?
- 8. क्या दृश्य स्टूडियो 9 में एक विशिष्ट शब्द के लिए रंग सेट करना संभव है?
- 9. सीपीयू इम्यूलेशन और एक विशिष्ट घड़ी की गति पर लॉकिंग
- 10. क्या एक गैर-चलने योग्य, गैर-प्रतिलिपि प्रकार का उदाहरण वापस करना संभव है?
- 11. क्या गिट submodules को अद्यतन करने के लिए मजबूर करना संभव है?
- 12. क्या डिस्पोजेबल कक्षाओं के लिए "उपयोग" के उपयोग को मजबूर करना संभव है?
- 13. क्या पुराने ऐप संस्करणों के उपयोगकर्ताओं को अद्यतन करने के लिए मजबूर करना संभव है?
- 14. क्या तारों को उत्पन्न करना संभव है जो एक नियमित अभिव्यक्ति स्ट्रिंग से मेल खाते हैं?
- 15. एक डॉकर कंटेनर को एक सीपीयू कोर
- 16. विशिष्ट दिनचर्या पर प्रदर्शन मीट्रिक: किसी भी सर्वोत्तम प्रथाओं?
- 17. क्या रूबी में एक चर को अपरिभाषित करना संभव है?
- 18. क्या एक कंप्यूटर पर एकाधिक ग्रहण स्थापित करना संभव है?
- 19. जावा नियमित अभिव्यक्ति एक विशिष्ट लंबाई
- 20. आईओएस - क्या यूआईएलएबल सबक्लास ऑब्जेक्ट को पहला उत्तरदाता बनने के लिए मजबूर करना संभव है?
- 21. क्या डब्ल्यूसीएफ परीक्षण क्लाइंट को स्व-हस्ताक्षरित प्रमाणपत्र स्वीकार करने के लिए मजबूर करना संभव है?
- 22. क्या एक ऑटो-प्रॉपर्टी को रीडोनली बैकिंग फ़ील्ड का उपयोग करने के लिए मजबूर करना संभव है?
- 23. क्या भाषा संबंध पर एक टेम्पलेट विशेषज्ञ करना संभव है?
- 24. क्या पाइथन के एक विशिष्ट परीक्षण के लिए setUp() को छोड़ना संभव है?
- 25. क्या जावास्क्रिप्ट को उपयोग करने से पहले चर घोषित करने के लिए मजबूर करना संभव है?
- 26. क्या सीपीयू चक्र किराए पर लेना संभव है?
- 27. क्या एक विशिष्ट परिदृश्य
- 28. क्या मैं पाइथन सरणी तत्वों को एक विशिष्ट आकार के लिए मजबूर कर सकता हूं?
- 29. क्या एक साथ कई बार एक परीक्षण चलाने के लिए नाक का उपयोग करना संभव है?
- 30. एक विशिष्ट स्थान पर
FWIW जाना 1.5 कैश जाने दिनचर्या के बीच जा रहा से बचने के लिए याद करते हैं और अधिक सही एक "होशियार अनुसूचक" है कि CPU के संबंध के लिए कहा जाता है। मुझे लगता है कि सीपीयू एफ़िनिटी की तरह है ... – rogerdpack