थ्रेडिंग बनाम मल्टीप्रोसेसिंग: अंतर और उपयोग के मामले
पायथन में कोड के हिस्सों को एक साथ चलाने के लिए मल्टीथ्रेडिंग और मल्टीप्रोसेसिंग दो तकनीकें हैं। हालांकि दोनों प्रदर्शन में सुधार के लक्ष्य को साझा करते हैं, विभिन्न कार्यों के लिए उनके कार्यान्वयन और उपयुक्तता में अलग-अलग अंतर हैं।
मुख्य अवधारणाएं
- धागे: एक ही प्रक्रिया के भीतर बनाया गया और एक ही मेमोरी स्पेस साझा किया गया। &&&]
- डेटा शेयरिंग
थ्रेड्स साझा किए गए डेटा तक पहुंच सकते हैं और संशोधित कर सकते हैं, जबकि प्रक्रियाओं को डेटा विनिमय के लिए स्पष्ट तंत्र की आवश्यकता होती है।
GIL (ग्लोबल इंटरप्रेटर लॉक)
पायथन के CPython दुभाषिया में एक GIL है जो कई थ्रेड्स को Python कोड को एक साथ निष्पादित करने से रोकता है।
यह सीमा समानांतर निष्पादन में बाधा उत्पन्न कर सकती है, विशेष रूप से में सीपीयू-बाध्य कार्य। प्रक्रियाओं की तुलना में सस्ता और तेज़। ]
- थ्रेड्स:
उन कार्यों के लिए उपयुक्त है:- वास्तविक समय प्रतिक्रिया की आवश्यकता होती है (उदाहरण के लिए, जीयूआई इवेंट हैंडलिंग)
भारी गणना शामिल न करें
आसानी से डेटा साझा कर सकते हैं
- प्रक्रियाएं:
उन कार्यों के लिए पसंदीदा:
क्या सीपीयू-गहन हैं
बड़ी मेमोरी आवश्यकताएं हैं
- संवेदनशील या पृथक डेटा शामिल हैं
समय-महत्वपूर्ण नहीं हैं
-
- समानांतर निष्पादन के लिए कतारें
- आप नौकरियों के पूल को प्रबंधित करने और समवर्ती रूप से निष्पादित कार्यों की संख्या को सीमित करने के लिए कतारों (जैसे, थ्रेडिंग.क्यू या मल्टीप्रोसेसिंग.क्यू) का उपयोग कर सकते हैं:
- # एक कतार बनाएं
कतार = मल्टीप्रोसेसिंग.क्यू ()
# एक प्रक्रिया पूल आरंभ करें
पूल = मल्टीप्रोसेसिंग.पूल(4)
# पूल में नौकरियां सबमिट करें
जॉब_लिस्ट में जॉब_तर्क के लिए:
पूल.apply_async(नौकरी, (job_argument,), कॉलबैक=queue.put)
# कतार से परिणाम प्राप्त करें
जबकि कतार नहीं है.खाली():
परिणाम = क्यू.गेट ()
# प्रक्रिया परिणाम...
अतिरिक्त संसाधन
- [पायथन में मल्टीथ्रेडिंग बनाम मल्टीप्रोसेसिंग](https://realpython.com/python-multithreading/ )
- [पायथन में Concurrent.futures मॉड्यूल का उपयोग करना](https://realpython.com/concurrent-futures-in-python/)
- [पायथन Concurrency और Parallelism](https: //www.coursera.org/specializations/python-concurrency-parallelism)