TypeScript में समवर्तीता और मल्टीथ्रेडिंग: एक संपूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें
```html

TypeScript में कंकरेंसी और मल्टीथ्रेडिंग: सिद्धांत से व्यवहार तक



आधुनिक वेब एप्लिकेशन उच्च प्रदर्शन की मांग करते हैं। TypeScript, जो Node.js के ऊपर काम करता है, एक साथ कई कार्यों को संसाधित करने के लिए शक्तिशाली उपकरण प्रदान करता है। इस लेख में, हम समझेंगे कि TypeScript में कंकरेंसी और मल्टीथ्रेडिंग कैसे काम करती है, और उन्हें व्यवहार में लागू करना सीखेंगे।



कंकरेंसी बनाम पैरेललिज़्म: मुख्य अंतर



कोड में गहराई से जाने से पहले, कंकरेंसी और पैरेललिज़्म के बीच अंतर को समझना महत्वपूर्ण है।

  • कंकरेंसी — कार्यक्रम की कई कार्यों को उनके बीच स्विच करके संसाधित करने की क्षमता है। JavaScript/TypeScript में, यह Event Loop और एसिंक्रोनस ऑपरेशन के माध्यम से कार्यान्वित किया जाता है।
  • पैरेललिज़्म — प्रोसेसर के विभिन्न कोर पर एक साथ कई कार्यों का निष्पादन है। Node.js में, यह Worker Threads के माध्यम से प्राप्त किया जाता है।


TypeScript (JavaScript की तरह) स्वाभाविक रूप से सिंगल-थ्रेडेड है, लेकिन एसिंक्रोनसिटी और Worker Threads के लिए धन्यवाद, हम दोनों दृष्टिकोणों का प्रभावी ढंग से उपयोग कर सकते हैं।



एसिंक्रोनसिटी: TypeScript में कंकरेंसी का आधार



एसिंक्रोनस प्रोग्रामिंग कंकरेंसी की ओर पहला कदम है। आइए मुख्य तंत्रों पर विचार करें।



Promises और async/await



आधुनिक TypeScript एसिंक्रोनस ऑपरेशन के साथ काम करने के लिए सक्रिय रूप से async/await का उपयोग करता है। यह ऐसा कोड लिखने की अनुमति देता है जो सिंक्रोनस दिखता है लेकिन कंकरेंटली निष्पादित होता है।



// एसिंक्रोनस फंक्शन का उदाहरणasync function fetchData(url: string): Promise<any> {  const response = await fetch(url);  return response.json();}

// कई अनुरोधों का कंकरेंट लॉन्चasync function fetchAllData(): Promise<void> { const [users, posts, comments] = await Promise.all([ fetchData('/api/users'), fetchData('/api/posts'), fetchData('/api/comments') ]); console.log('सभी डेटा कंकरेंटली लोड हो गए');}


Promise.all आपको एक साथ कई एसिंक्रोनस ऑपरेशन शुरू करने की अनुमति देता है, जो अनुक्रमिक लॉन्च की तुलना में निष्पादन को काफी तेज करता है।



एसिंक्रोनस कोड में त्रुटि प्रबंधन



कंकरेंट निष्पादन के दौरान त्रुटियों को सही ढंग से संभालना महत्वपूर्ण है:



async function safeFetchAll(): Promise<void> {  try {    const results = await Promise.allSettled([      fetchData('/api/users'),      fetchData('/api/invalid'),      fetchData('/api/posts')    ]);        results.forEach((result, index) => {      if (result.status === 'fulfilled') {        console.log(`अनुरोध ${index} सफल:`, result.value);      } else {        console.error(`अनुरोध ${index} विफल:`, result.reason);      }    });  } catch (error) {    console.error('गंभीर त्रुटि:', error);  }}


Worker Threads: TypeScript में वास्तविक मल्टीथ्रेडिंग



CPU-गहन कार्यों (इमेज प्रोसेसिंग, जटिल गणना) के लिए, अकेली एसिंक्रोनसिटी पर्याप्त नहीं है। यहाँ Worker Threads बचाव में आते हैं — निष्पादन के वास्तविक थ्रेड।



Worker Thread बनाना



एक अलग थ्रेड में फिबोनाची संख्याओं की गणना करने का उदाहरण देखें:



// fibonacci.worker.tsimport { parentPort } from 'worker_threads';

function fibonacci(n: number): number { if (n <= 1) return n; return fibonacci(n - 1) + fibonacci(n - 2);}

parentPort?.on('message', (n: number) => { const result = fibonacci(n); parentPort?.postMessage(result);});


// main.tsimport { Worker } from 'worker_threads';import path from 'path';

function runFibonacci(n: number): Promise<number> { return new Promise((resolve, reject) => { const worker = new Worker(path.resolve(__dirname, 'fibonacci.worker.ts')); worker.postMessage(n); worker.on('message', (result: number) => { resolve(result); worker.terminate(); }); worker.on('er ```

ब्लॉग

पुस्तक अनुशंसाएँ