यदि आपके सभी थ्रेड/प्रक्रियाएं वास्तव में सीपीयू-बाउंड हैं, तो आपको सीपीयू रिपोर्ट कोर के रूप में कई प्रक्रियाएं चलनी चाहिए। HyperThreading के कारण, प्रत्येक भौतिक CPU कोर एकाधिक वर्चुअल कोर प्रस्तुत करने में सक्षम हो सकता है। वर्चुअल कोर की संख्या प्राप्त करने के लिए multiprocessing.cpu_count
पर कॉल करें।
अगर केवल पी अपने धागे की 1 के सीपीयू बाध्य है, तो आप पी से गुणा करके कि संख्या को समायोजित कर सकते हैं। उदाहरण के लिए, यदि आपकी आधे प्रक्रियाएं सीपीयू-बाउंड हैं (पी = 0.5) और आपके पास दो कोर हैं जिनमें 2 कोर और 2 एक्स हाइपर थ्रेडिंग है, तो आपको 0.5 * 2 * 4 * 2 = 8 प्रक्रियाएं शुरू करनी चाहिए।
यदि आपके पास बहुत कम प्रक्रिया है, तो आपका आवेदन अपेक्षा से धीमा हो जाएगा। यदि आपका एप्लिकेशन पूरी तरह से स्केल करता है और केवल सीपीयू-बाउंड है (यानी 10 गुना तेजी से कोर की मात्रा 10 गुना पर निष्पादित होता है), इसका मतलब है कि आप संबंध में गति धीमी है। उदाहरण के लिए, यदि आपका सिस्टम 8 प्रक्रियाओं के लिए कॉल करता है, लेकिन आप केवल 4 आरंभ करते हैं, तो आप केवल प्रोसेसिंग क्षमता का आधा उपयोग करेंगे और दो गुना अधिक समय लेंगे। ध्यान दें कि अभ्यास में, कोई भी आवेदन पूरी तरह से स्केल नहीं करता है, लेकिन कुछ (रे ट्रेसिंग, वीडियो एन्कोडिंग) बहुत करीब हैं।
यदि आपके पास बहुत अधिक प्रक्रियाएं हैं, तो सिंक्रनाइज़ेशन ओवरहेड बढ़ेगा। यदि आपका प्रोग्राम किसी भी सिंक्रनाइज़ेशन ओवरहेड से कम नहीं है, तो यह कुल रनटाइम को प्रभावित नहीं करेगा, लेकिन अन्य प्रोग्राम तब तक धीमे दिखाई दे सकते हैं जब तक कि आप अपनी प्रक्रियाओं को कम प्राथमिकता पर सेट न करें। प्रक्रियाओं की अत्यधिक संख्या (कहें, 10000) सिद्धांत में ठीक हैं यदि आपके ओएस के पास एक अच्छा शेड्यूलर है। व्यावहारिक रूप से, लगभग किसी भी सिंक्रनाइज़ेशन ओवरहेड असहनीय बना देगा।
यदि आप सुनिश्चित नहीं हैं कि आपका एप्लिकेशन सीपीयू-बाउंड और/या पूरी तरह से स्केलिंग है, तो बस विभिन्न थ्रेड गणनाओं के साथ सिस्टम लोड का निरीक्षण करें। आप चाहते हैं कि वर्चुअल कोर की संख्या होने के लिए सिस्टम 100% से कम हो, या अधिक सटीक uptime हो।
महान उत्तर के लिए धन्यवाद। वह सब नहीं पता था। यदि ऐप में कुछ गैर-सीपीयू बाध्य भाग हैं तो क्या होगा। उदाहरण के लिए, सीपीयू गणनाओं के बहुत सारे, लेकिन फिर अंतिम परिणाम फ़ाइल या डेटाबेस में सहेजा जाता है। क्या इसका मतलब है कि मुझे और प्रक्रियाएं बनाना चाहिए क्योंकि कुछ को अंतिम नेटवर्क (डेटाबेस) या डिस्क लिखने (फ़ाइल लिखने) के लिए इंतजार करना है? – Lostsoul
@Lostsoul सामान्य रूप से, हाँ यदि डिस्क-बाध्य गतिविधि का हिस्सा महत्वपूर्ण है। यदि आप एक संक्षिप्त सारांश फ़ाइल लिख रहे हैं (कहें, एक जटिल दृश्य raytracing के बाद छवि), यह प्रभाव नगण्य है।यदि आपका एप्लिकेशन बहुत सारे डेटा को पढ़ता और लिखता है, तो आपको वास्तव में प्रक्रियाओं की संख्या में वृद्धि करनी चाहिए। एक पैराग्राफ के साथ उत्तर अपडेट किया गया: यदि आप सुनिश्चित नहीं हैं, तो इसे आज़माएं! – phihag
केवल अवलोकन भाग में जोड़ने के लिए: आप सिंक्रनाइज़ेशन ओवरहेड की वजह से सीपीयू उपयोग में वृद्धि से बचना चाहते हैं। इसलिए, प्रयोग करते समय, आपको सिस्टम लोड, और अपने एप्लिकेशन थ्रूपुट दोनों को मापना चाहिए। – millimoose