इम्प्लिसिट थ्रेडिंग
मल्टीथ्रेडेड एप्लिकेशन के डिजाइन की कठिनाइयों को दूर करने का एक तरीका है थ्रेड निर्माण और प्रबंधन को एप्लिकेशन डेवलपर्स से कंपाइलर्स और रन-टाइम लाइब्रेरी में स्थानांतरित करना। इसे इम्प्लिसिट थ्रेडिंग कहा जाता है, जो आज एक लोकप्रिय प्रवृत्ति है।
इम्प्लिसिट थ्रेडिंग मुख्य रूप से लाइब्रेरी या अन्य भाषा समर्थन का उपयोग करके थ्रेड्स के प्रबंधन को छिपाती है। C के संदर्भ में सबसे आम इम्प्लिसिट थ्रेडिंग लाइब्रेरी OpenMP है।
OpenMP
OpenMP, C, C++, या FORTRAN में लिखे प्रोग्राम के लिए कंपाइलर निर्देशों का एक सेट और एक API है जो शेयर्ड-मेमोरी वातावरण में समानांतर प्रोग्रामिंग के लिए समर्थन प्रदान करता है। OpenMP समानांतर क्षेत्रों की पहचान करता है जो कोड के ब्लॉक हैं जो समानांतर में चल सकते हैं। डेवलपर्स समानांतर क्षेत्रों पर कंपाइलर निर्देश डालते हैं, जो OpenMP रन-टाइम लाइब्रेरी को क्षेत्र को समानांतर में निष्पादित करने का निर्देश देते हैं।
उदाहरण
#include <omp.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
/* अनुक्रमिक कोड */
#pragma omp parallel {
printf("I am a parallel region.");
}
/* अनुक्रमिक कोड */
return 0;
}
आउटपुट: "I am a parallel region."
जब OpenMP को `#pragma omp parallel` निर्देश मिलता है, तो यह सिस्टम में प्रोसेसिंग कोर जितने थ्रेड बनाता है। फिर सभी थ्रेड्स एक साथ समानांतर क्षेत्र को निष्पादित करते हैं। प्रत्येक थ्रेड के समानांतर क्षेत्र से बाहर निकलने पर वह समाप्त हो जाता है।
ग्रैंड सेंट्रल डिस्पैच (GCD)
GCD, Apple के Mac OS X और iOS के लिए एक तकनीक है जो C भाषा के एक्सटेंशन, एक API, और एक रन-टाइम लाइब्रेरी का संयोजन है जो डेवलपर्स को कोड के उन हिस्सों को चिह्नित करने की अनुमति देती है जो समानांतर में चल सकते हैं।
थ्रेड्स एज़ ऑब्जेक्ट्स
Java और Python जैसी भाषाओं में थ्रेड्स को ऑब्जेक्ट्स के रूप में दर्शाया जाता है। Java में `Thread` क्लास या `Runnable` इंटरफेस, Python में `threading` मॉड्यूल का उपयोग किया जाता है।
कंकरेंसी एज़ लैंग्वेज डिज़ाइन
नई भाषाएं जैसे Go (गोरूटीन और चैनल) और Rust (ऑनरशिप मॉडल के साथ थ्रेड्स) कंकरेंसी को भाषा डिजाइन में ही शामिल करती हैं।