जावास्क्रिप्ट में समानता क्या है?

जावास्क्रिप्ट में समानता क्या है?
आप जैसे पाठक MUO का समर्थन करने में मदद करते हैं। जब आप हमारी साइट पर लिंक का उपयोग करके खरीदारी करते हैं, तो हम संबद्ध कमीशन अर्जित कर सकते हैं। और पढ़ें।

जावास्क्रिप्ट प्रदर्शन-गहन कार्यों के साथ संघर्ष कर सकता है क्योंकि यह एकल-थ्रेडेड भाषा है। समानता का उपयोग करके, आप जावास्क्रिप्ट में बहु-थ्रेडेड निष्पादन प्राप्त कर सकते हैं और अपने आधुनिक वेब ऐप्स के प्रदर्शन और जवाबदेही में सुधार कर सकते हैं।





जावास्क्रिप्ट प्रोग्रामिंग में समानता

प्रदर्शन और मापनीयता में सुधार के लिए आधुनिक कंप्यूटिंग में समानता महत्वपूर्ण है। यह उपलब्ध संसाधनों का प्रभावी ढंग से उपयोग करके ऐसा करता है।





दिन का वीडियो सामग्री के साथ जारी रखने के लिए स्क्रॉल करें

प्रोग्रामिंग में समानता प्राप्त करने के लिए उपयोग की जाने वाली एक सामान्य तकनीक मल्टी-थ्रेडिंग है। हालाँकि, जावास्क्रिप्ट थ्रेड एक सिंगल-थ्रेड सिस्टम है और एक समय में केवल एक ही कार्य को संभाल सकता है। इसका मतलब यह है कि यह समांतर प्रोग्राम निष्पादन से अपरिचित है।





जावास्क्रिप्ट नकली समानांतर प्रोग्रामिंग

समांतरता के बारे में एक आम गलतफहमी यह है कि आप इसका उपयोग करके इसे प्राप्त कर सकते हैं अतुल्यकालिक प्रोग्रामिंग तकनीक जैसे async/प्रतीक्षा, कॉलबैक और वादे:

 // Async/await function that simulates a network request 
async function fetchData() {
  const response = await fetch();
  const data = await response.json();
  return data;
}

// Callback function that logs the fetched data to the console
function logData(data) {
  console.log(data);
}

// Promise.all() method that executes multiple promises in parallel
Promise.all([
  fetchData(),
  fetchData(),
]).then((results) => {
  console.log(results);
});

// Call the fetchData function and pass the logData function as a callback
fetchData().then(logData);

ये तकनीकें वास्तव में समानांतर में कोड निष्पादित नहीं करती हैं। जावास्क्रिप्ट अपने सिंगल-थ्रेड डिज़ाइन के भीतर समांतर प्रोग्रामिंग की नकल करने के लिए इवेंट लूप का उपयोग करता है।



मेरे पास एक पिल्ला कहाँ मिलेगा

इवेंट लूप जावास्क्रिप्ट रनटाइम वातावरण का एक मूलभूत हिस्सा है। यह आपको मुख्य सिंगल थ्रेड को ब्लॉक किए बिना बैकग्राउंड में एसिंक्रोनस ऑपरेशंस, जैसे नेटवर्क रिक्वेस्ट को निष्पादित करने की अनुमति देता है।

इवेंट लूप लगातार कतार में नई घटनाओं या कार्यों की जांच करता है और उन्हें क्रमिक रूप से एक-एक करके निष्पादित करता है। यह तकनीक जावास्क्रिप्ट को संगामिति और सैद्धांतिक समानता प्राप्त करने की अनुमति देती है।





संगामिति बनाम समानता

Concurrency और Parallelism को अक्सर JavaScript दुनिया में गलत समझा जाता है और आपस में बदल दिया जाता है।

जावास्क्रिप्ट में समवर्ती कार्यों के निष्पादन को ओवरलैप करके कई कार्यों को निष्पादित करने की क्षमता को संदर्भित करता है। जहां एक कार्य दूसरे के पूरा होने से पहले शुरू हो सकता है, लेकिन कार्य न तो एक साथ शुरू हो सकते हैं और न ही समाप्त हो सकते हैं। यह जावास्क्रिप्ट को संचालन को कुशलतापूर्वक संभालने में सक्षम बनाता है, जैसे REST API से डेटा लाना या फ़ाइलें पढ़ना, मुख्य निष्पादन थ्रेड को अवरुद्ध किए बिना।





समानांतरवाद, दूसरी ओर, कई थ्रेड्स में एक साथ कई कार्यों को निष्पादित करने की क्षमता को संदर्भित करता है। ये पृष्ठभूमि धागे कार्यों को स्वतंत्र रूप से और एक साथ निष्पादित कर सकते हैं। यह जावास्क्रिप्ट अनुप्रयोगों में वास्तविक समानता प्राप्त करने के अवसर खोलता है।

जावास्क्रिप्ट के अनुप्रयोग वास्तविक समानता प्राप्त कर सकते हैं वेब कर्मचारियों का उपयोग .

वेब कर्मचारी जावास्क्रिप्ट के लिए समानांतरवाद का परिचय देते हैं

वेब वर्कर्स आधुनिक वेब ब्राउज़रों की एक विशेषता है जो मुख्य निष्पादन थ्रेड से अलग, जावास्क्रिप्ट कोड को बैकग्राउंड थ्रेड्स में चलाने की अनुमति देता है। मुख्य थ्रेड के विपरीत, जो उपयोगकर्ता इंटरैक्शन और UI अपडेट को हैंडल करता है। वेब वर्कर कम्प्यूटेशनल रूप से गहन कार्यों को करने के लिए समर्पित होगा।

नीचे जावास्क्रिप्ट में एक वेब वर्कर के संचालन का आरेख प्रतिनिधित्व है।

  वेब वर्कर ऑपरेशन प्रवाह का एक तीर आरेख

मुख्य थ्रेड और वेब वर्कर मैसेज पासिंग का उपयोग करके संवाद कर सकते हैं। का उपयोग संदेश भेजें संदेश भेजने की विधि और onmessage संदेश प्राप्त करने के लिए ईवेंट हैंडलर, आप आगे और पीछे निर्देश या डेटा पास कर सकते हैं।

एक वेब कार्यकर्ता बनाना

एक वेब वर्कर बनाने के लिए, आपको एक अलग जावास्क्रिप्ट फाइल बनाने की जरूरत है।

यहाँ एक उदाहरण है:

 // main.js 

// Create a new Web Worker
const worker = new Worker('worker.js');

// Send a message to the Web Worker
worker.postMessage('Hello from the main thread!');

// Listen for messages from the Web Worker
worker.onmessage = function(event) {
  console.log('Received message from Web Worker:', event.data);
};

उपरोक्त उदाहरण वर्कर स्क्रिप्ट के पथ को पास करके एक नया वेब वर्कर बनाता है ( कार्यकर्ता.जेएस ) के तर्क के रूप में मज़दूर निर्माता। आप का उपयोग करके वेब वर्कर को एक संदेश भेज सकते हैं संदेश भेजें विधि का उपयोग करके वेब वर्कर के संदेशों को सुनें और onmessage आयोजन प्रबंधकर्ता।

फिर आपको वर्कर स्क्रिप्ट बनानी चाहिए ( कार्यकर्ता.जेएस ) फ़ाइल:

 // worker.js 

// Listen for messages from the main thread
self.onmessage = function(event) {
  console.log('Received message from main thread:', event.data);

  // Send a message back to the main thread
  self.postMessage("Hello from worker.js!");
};

वेब वर्कर स्क्रिप्ट का उपयोग करके मुख्य थ्रेड से संदेशों को सुनता है onmessage आयोजन प्रबंधकर्ता। संदेश प्राप्त होने पर, आप संदेश को अंदर से लॉग आउट कर देते हैं घटना.डेटा और मुख्य धागे को एक नया संदेश भेजें संदेश भेजें तरीका।

वेब कर्मचारियों के साथ समानता का लाभ उठाना

वेब वर्कर्स के लिए प्राथमिक उपयोग मामला कम्प्यूटेशनल रूप से गहन जावास्क्रिप्ट कार्यों को समानांतर में निष्पादित कर रहा है। इन कार्यों को वेब कर्मचारियों पर ऑफलोड करके, आप महत्वपूर्ण प्रदर्शन सुधार प्राप्त कर सकते हैं।

यहाँ एक भारी गणना करने के लिए वेब वर्कर का उपयोग करने का एक उदाहरण दिया गया है:

 // main.js 

const worker = new Worker('worker.js');

// Send data to the Web Worker for calculation
worker.postMessage([1, 2, 3, 4, 5]);

// Listen for the result from the Web Worker
worker.onmessage = function(event) {
  const result = event.data;
  console.log('Calculation result:', result);
};

वर्कर.जेएस:

 // Listen for data from the main thread 
self.onmessage = function (event) {
  const numbers = event.data;

  const result = performHeavyCalculation(numbers);

  // Send the result back to the main thread
  self.postMessage(result);
};

function performHeavyCalculation(data) {
  // Perform a complex calculation on the array of numbers
  return data
    .map((number) => Math.pow(number, 3)) // Cube each number
    .filter((number) => number % 2 === 0) // Filter even numbers
    .reduce((sum, number) => sum + number, 0); // Sum all numbers
}

इस उदाहरण में, आप मुख्य थ्रेड से वेब वर्कर को संख्याओं की एक सरणी पास करते हैं। वेब वर्कर डेटा की प्रदान की गई सरणी का उपयोग करके गणना करता है और परिणाम को मुख्य थ्रेड पर वापस भेजता है। प्रदर्शन भारी गणना () फ़ंक्शन प्रत्येक संख्या को उसके घन में मैप करता है, सम संख्याओं को फ़िल्टर करता है, और अंत में उनका योग करता है।

सीमाएं और विचार

जबकि वेब वर्कर्स जावास्क्रिप्ट में समानता प्राप्त करने के लिए एक तंत्र प्रदान करते हैं, कुछ सीमाओं और विचारों पर विचार करना महत्वपूर्ण है:

  • कोई साझा मेमोरी नहीं : वेब कर्मचारी अलग-अलग थ्रेड्स में काम करते हैं और मुख्य थ्रेड के साथ मेमोरी साझा नहीं करते हैं। इसलिए, वे संदेश पास किए बिना मुख्य थ्रेड से सीधे वेरिएबल्स या ऑब्जेक्ट्स तक नहीं पहुंच सकते हैं।
  • क्रमांकन और देशीकरण : मुख्य थ्रेड और वेब वर्कर्स के बीच डेटा पास करते समय, आपको डेटा को क्रमबद्ध और डिस्क्रिअलाइज़ करने की आवश्यकता होती है क्योंकि संदेश पासिंग एक टेक्स्ट-आधारित संचार है। इस प्रक्रिया में एक प्रदर्शन लागत लगती है और यह ऐप के समग्र प्रदर्शन को प्रभावित कर सकती है।
  • ब्राउज़र समर्थन : हालांकि अधिकांश आधुनिक वेब ब्राउज़र में वेब वर्कर्स अच्छी तरह से समर्थित हैं, कुछ पुराने ब्राउज़र या सीमित वातावरण में वेब वर्कर्स के लिए आंशिक या कोई समर्थन नहीं हो सकता है।

जावास्क्रिप्ट में सही समानता प्राप्त करें

जावास्क्रिप्ट में समानता एक रोमांचक अवधारणा है जो मुख्य रूप से एकल-थ्रेडेड भाषा में भी कार्यों के वास्तविक समवर्ती निष्पादन को सक्षम बनाती है। वेब वर्कर्स की शुरुआत के साथ, आप समानता की शक्ति का दोहन कर सकते हैं और अपने जावास्क्रिप्ट अनुप्रयोगों में महत्वपूर्ण प्रदर्शन सुधार प्राप्त कर सकते हैं।