जवाबों:
एक थ्रेड वह होता है जो ओएस देखता है और इसे चलाने के लिए कोर पर शेड्यूल करता है।
कार्यक्रम एकल-थ्रेडेड या बहु-थ्रेडेड हो सकते हैं। कार्यक्रम अन्य कार्यक्रमों को भी स्पॉन कर सकते हैं और उनके साथ प्रक्रिया-स्तर I / O तकनीकों जैसे पाइप या फ़ाइल हैंडल आदि के माध्यम से संवाद कर सकते हैं, लेकिन OS के दृष्टिकोण से ये उप-प्रोग्राम अभी भी थ्रेड्स का संग्रह हैं। यह वास्तव में मायने नहीं रखता है यदि प्रोग्राम कई थ्रेड्स को स्पॉन कर रहा है या यदि यह सब-प्रक्रियाओं को स्पॉन कर रहा है - दोनों दृष्टिकोण ओएस-स्तर के थ्रेड्स का प्रतिनिधित्व करते हैं जो ओएस शेड्यूल करने और कुशलता से और संभवतः समानांतर में निष्पादित करने का प्रयास करेंगे।
यदि आपके पास कई कोर हैं और एक प्रोग्राम के थ्रेड्स को स्पष्ट रूप से एक कोर पर लॉक नहीं किया जा रहा है, तो ओएस उन्हें एक ही समय में चलाने की कोशिश कर सकता है, समानांतर में, वर्तमान मशीन में इसे उपलब्ध सभी कोर के पार। यदि आपके पास कई कार्यक्रम चल रहे हैं, तो OS उन सभी अंतर्निहित थ्रेडों को शेड करेगा जो वर्तमान मशीन में उपलब्ध हैं।
व्यावहारिक रूप से आई / ओ, इंटर-प्रोसेस या इंटर-थ्रेड कम्युनिकेशन और सिंक्रोनाइजेशन की कुछ मात्रा है जो होने की जरूरत है और इससे ओएस-लेवल थ्रेड्स ब्लॉक हो सकते हैं और हर समय चीजों को सही तरह से चलने से रोक सकते हैं। उदाहरण के लिए: एक बहु-थ्रेडेड प्रोग्राम में दो धागे किसी कार्य को करने के लिए एक साझा स्टैक से मान खींच सकते हैं, इसलिए स्टैक तक पहुंच सुनिश्चित करने के लिए समन्वित होना चाहिए ताकि सब कुछ थ्रेड सुरक्षित हो और इसका मतलब है कि केवल एक धागा पॉप से हो सकता है समय पर स्टैक डेटा संरचना। प्रोग्राम के डिज़ाइन में एक अड़चन है जो थ्रेड समानता को यहाँ एक तक सीमित कर रहा है और OS इसके साथ मदद नहीं कर सकता है।
उप-प्रक्रियाओं को स्पॉन करने वाले कार्यक्रमों के लिए भी यही सच है। I / O या अंतर-प्रक्रिया सिंक्रनाइज़ेशन समस्याएँ हो सकती हैं जो सभी स्पॉन्स्ड सब-प्रोसेस को सही मायने में सभी समय में समानांतर चलने से रोकती हैं।
यदि एप्लिकेशन स्वयं मल्टीथ्रेडेड नहीं है, तो यह एक ही कोर पर रहेगा। यदि आपके पास कई एकल थ्रेडेड एप्लिकेशन हैं जो चल रहे हैं तो यह मान लेना उचित है कि ओएस एक्स उन्हें उचित रूप से कोर के बीच वितरित करेगा।