জাভাস্ক্রিপ্টে সমান্তরালতা কি?

জাভাস্ক্রিপ্টে সমান্তরালতা কি?
আপনার মত পাঠকরা MUO সমর্থন করতে সাহায্য করে। আপনি যখন আমাদের সাইটে লিঙ্ক ব্যবহার করে একটি ক্রয় করেন, আমরা একটি অনুমোদিত কমিশন উপার্জন করতে পারি। আরও পড়ুন

জাভাস্ক্রিপ্ট কর্মক্ষমতা-নিবিড় কাজগুলির সাথে লড়াই করতে পারে কারণ এটি একটি একক-থ্রেডেড ভাষা। সমান্তরালতা ব্যবহার করে, আপনি জাভাস্ক্রিপ্টে মাল্টিথ্রেডেড এক্সিকিউশন অর্জন করতে পারেন এবং আপনার আধুনিক ওয়েব অ্যাপের কর্মক্ষমতা এবং প্রতিক্রিয়াশীলতা উন্নত করতে পারেন।





জাভাস্ক্রিপ্ট প্রোগ্রামিং-এ সমান্তরালতা

পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করার জন্য আধুনিক কম্পিউটিংয়ে সমান্তরালতা অত্যন্ত গুরুত্বপূর্ণ। এটি কার্যকরভাবে উপলব্ধ সম্পদ ব্যবহার করে এটি করে।





দিনের মেকইউজের ভিডিও কন্টেন্টের সাথে চালিয়ে যেতে স্ক্রোল করুন

প্রোগ্রামিং-এ সমান্তরালতা অর্জনের জন্য ব্যবহৃত একটি সাধারণ কৌশল হল মাল্টি-থ্রেডিং। জাভাস্ক্রিপ্ট থ্রেড, যাইহোক, একটি একক-থ্রেড সিস্টেম এবং একটি সময়ে শুধুমাত্র একটি কাজ পরিচালনা করতে পারে। এর মানে এটি সমান্তরাল প্রোগ্রাম এক্সিকিউশনের সাথে অপরিচিত।





কিভাবে ফটোশপে টেক্সটকে আউটলাইন দেওয়া যায়

জাভাস্ক্রিপ্ট প্যারালাল প্রোগ্রামিং জাল করে

সমান্তরাল সম্পর্কে একটি সাধারণ ভুল ধারণা হল যে আপনি এটি ব্যবহার করে অর্জন করতে পারেন অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং কৌশল যেমন অ্যাসিঙ্ক/অপেক্ষা, কলব্যাক এবং প্রতিশ্রুতি:

 // 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);

এই কৌশলগুলি আসলে সমান্তরালে কোড চালায় না। জাভাস্ক্রিপ্ট তার একক-থ্রেড ডিজাইনের মধ্যে সমান্তরাল প্রোগ্রামিং অনুকরণ করতে ইভেন্ট লুপ ব্যবহার করে।



ইভেন্ট লুপ জাভাস্ক্রিপ্ট রানটাইম পরিবেশের একটি মৌলিক অংশ। এটি আপনাকে প্রধান একক থ্রেড ব্লক না করে পটভূমিতে নেটওয়ার্ক অনুরোধের মতো অ্যাসিঙ্ক্রোনাস ক্রিয়াকলাপগুলি চালানোর অনুমতি দেয়।

ইভেন্ট লুপ ক্রমাগত একটি সারিতে নতুন ইভেন্ট বা কাজগুলি পরীক্ষা করে এবং সেগুলিকে একের পর এক ক্রমানুসারে কার্যকর করে। এই কৌশলটি জাভাস্ক্রিপ্টকে সঙ্গতি এবং তাত্ত্বিক সমান্তরালতা অর্জন করতে দেয়।





সামঞ্জস্য বনাম সমান্তরালতা

জাভাস্ক্রিপ্ট বিশ্বে সমতা এবং সমান্তরালতা প্রায়শই ভুল বোঝাবুঝি এবং বিনিময় হয়।

জাভাস্ক্রিপ্টে একযোগে কার্য সম্পাদনকে ওভারল্যাপ করে একাধিক কাজ চালানোর ক্ষমতা বোঝায়। যেখানে একটি কাজ অন্যটি সম্পূর্ণ হওয়ার আগে শুরু হতে পারে, তবে কাজগুলি একই সাথে শুরু বা শেষ হতে পারে না। এটি জাভাস্ক্রিপ্টকে কার্যকারিতা পরিচালনা করতে সক্ষম করে, যেমন একটি REST API থেকে ডেটা আনা বা ফাইলগুলি পড়া, মূল এক্সিকিউশন থ্রেড ব্লক না করে।





উইন্ডোজ 10 এর জন্য উইন্ডোজ এক্সপি স্কিন

অন্যদিকে, সমান্তরালতা, একাধিক থ্রেড জুড়ে একযোগে একাধিক কাজ সম্পাদন করার ক্ষমতাকে বোঝায়। এই ব্যাকগ্রাউন্ড থ্রেডগুলি স্বাধীনভাবে এবং একই সাথে কাজগুলি সম্পাদন করতে পারে। এটি জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনগুলিতে সত্য সমান্তরালতা অর্জনের সুযোগ উন্মুক্ত করে।

জাভাস্ক্রিপ্টের অ্যাপ্লিকেশন এর মাধ্যমে সত্য সমান্তরালতা অর্জন করতে পারে ওয়েব ওয়ার্কারদের ব্যবহার .

ওয়েব ওয়ার্কাররা জাভাস্ক্রিপ্টের সমান্তরালতার পরিচয় দেয়

ওয়েব ওয়ার্কার্স হল আধুনিক ওয়েব ব্রাউজারগুলির একটি বৈশিষ্ট্য যা জাভাস্ক্রিপ্ট কোডকে মূল এক্সিকিউশন থ্রেড থেকে আলাদা করে ব্যাকগ্রাউন্ড থ্রেডে চালানোর অনুমতি দেয়। মূল থ্রেডের বিপরীতে, যা ব্যবহারকারীর মিথস্ক্রিয়া এবং UI আপডেটগুলি পরিচালনা করে। ওয়েব ওয়ার্কার গণনামূলকভাবে নিবিড় কাজ সম্পাদনের জন্য নিবেদিত হবে।

নিচে জাভাস্ক্রিপ্টে একজন ওয়েব ওয়ার্কারের অপারেশনের একটি চিত্র উপস্থাপন করা হল।

  ওয়েব ওয়ার্কার অপারেশন প্রবাহের একটি তীর চিত্র

মূল থ্রেড এবং ওয়েব ওয়ার্কার বার্তা পাসিং ব্যবহার করে যোগাযোগ করতে পারে। ব্যবহার করে বার্তা দিন বার্তা পাঠানোর পদ্ধতি এবং বার্তা ইভেন্ট হ্যান্ডলার বার্তাগুলি গ্রহণ করতে, আপনি নির্দেশাবলী বা ডেটা সামনে এবং পিছনে পাস করতে পারেন।

ওয়েব ওয়ার্কার তৈরি করা

একটি ওয়েব ওয়ার্কার তৈরি করতে, আপনাকে একটি পৃথক জাভাস্ক্রিপ্ট ফাইল তৈরি করতে হবে।

এখানে একটি উদাহরণ:

 // 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);
};

উপরের উদাহরণটি কর্মী স্ক্রিপ্টের পাথ পাস করে একটি নতুন ওয়েব কর্মী তৈরি করে ( worker.js ) একটি যুক্তি হিসাবে কর্মী নির্মাণকারী আপনি ব্যবহার করে ওয়েব ওয়ার্কারকে একটি বার্তা পাঠাতে পারেন বার্তা দিন পদ্ধতি এবং ব্যবহার করে ওয়েব ওয়ার্কার থেকে বার্তা শুনতে বার্তা অনুষ্ঠান পরিচালনাকারী.

তারপরে আপনাকে কর্মী স্ক্রিপ্ট তৈরি করা উচিত ( worker.js ) ফাইল:

লিঙ্কডিন কিভাবে আপনার প্রোফাইল দেখেছেন তা দেখতে হবে
 // 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!");
};

ওয়েব ওয়ার্কার স্ক্রিপ্টটি ব্যবহার করে প্রধান থ্রেড থেকে বার্তা শোনে বার্তা অনুষ্ঠান পরিচালনাকারী. একটি বার্তা পাওয়ার পরে, আপনি ভিতরে বার্তা লগ আউট ঘটনা ডেটা এবং এর সাথে মূল থ্রেডে একটি নতুন বার্তা পাঠান বার্তা দিন পদ্ধতি

ওয়েব কর্মীদের সাথে সমান্তরালতা লাভ করা

ওয়েব ওয়ার্কারদের জন্য প্রাথমিক ব্যবহারের ক্ষেত্রে সমান্তরালভাবে গণনামূলকভাবে নিবিড় জাভাস্ক্রিপ্ট কার্য সম্পাদন করা হয়। ওয়েব ওয়ার্কারদের কাছে এই কাজগুলি অফলোড করে, আপনি উল্লেখযোগ্য কর্মক্ষমতা উন্নতি অর্জন করতে পারেন৷

এখানে একটি ভারী গণনা করার জন্য একজন ওয়েব কর্মী ব্যবহার করার একটি উদাহরণ রয়েছে:

 // 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);
};

Worker.js:

 // 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
}

এই উদাহরণে, আপনি মূল থ্রেড থেকে ওয়েব ওয়ার্কারে নম্বরের একটি অ্যারে পাস করেন। ওয়েব ওয়ার্কার প্রদত্ত ডেটা অ্যারে ব্যবহার করে গণনা সম্পাদন করে এবং ফলাফলটি মূল থ্রেডে ফেরত পাঠায়। দ্য ভারী গণনা সম্পাদন () ফাংশন প্রতিটি সংখ্যাকে তার ঘনক্ষেত্রে ম্যাপ করে, জোড় সংখ্যাগুলিকে ফিল্টার করে এবং অবশেষে তাদের যোগ করে।

সীমাবদ্ধতা এবং বিবেচনা

ওয়েব ওয়ার্কাররা জাভাস্ক্রিপ্টে সমান্তরালতা অর্জনের জন্য একটি প্রক্রিয়া প্রদান করলে, কিছু সীমাবদ্ধতা এবং বিবেচনা বিবেচনা করা গুরুত্বপূর্ণ:

  • কোনো শেয়ার করা মেমরি নেই : ওয়েব ওয়ার্কাররা আলাদা থ্রেডে কাজ করে এবং মূল থ্রেডের সাথে মেমরি শেয়ার করে না। সুতরাং, তারা মেসেজ পাস না করে সরাসরি মূল থ্রেড থেকে ভেরিয়েবল বা বস্তু অ্যাক্সেস করতে পারে না।
  • সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন : প্রধান থ্রেড এবং ওয়েব ওয়ার্কারদের মধ্যে ডেটা পাস করার সময়, আপনাকে ডেটা সিরিয়ালাইজ এবং ডিসিরিয়ালাইজ করতে হবে যেহেতু বার্তা পাস করা একটি পাঠ্য-ভিত্তিক যোগাযোগ। এই প্রক্রিয়াটি একটি কর্মক্ষমতা খরচ বহন করে এবং অ্যাপের সামগ্রিক কর্মক্ষমতা প্রভাবিত করতে পারে।
  • ব্রাউজার সমর্থন : যদিও বেশিরভাগ আধুনিক ওয়েব ব্রাউজারে ওয়েব কর্মী সমর্থিত, কিছু পুরানো ব্রাউজার বা সীমিত পরিবেশে ওয়েব কর্মীদের জন্য আংশিক বা কোন সমর্থন নেই।

জাভাস্ক্রিপ্টে সত্যিকারের সমান্তরালতা অর্জন করুন

জাভাস্ক্রিপ্টে সমান্তরালতা হল একটি উত্তেজনাপূর্ণ ধারণা যা কাজগুলির সত্যিকারের সমসাময়িক সম্পাদনকে সক্ষম করে, এমনকি প্রাথমিকভাবে একক-থ্রেডেড ভাষায়ও। ওয়েব ওয়ার্কার্স প্রবর্তনের সাথে, আপনি সমান্তরালতার শক্তিতে ট্যাপ করতে পারেন এবং আপনার জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনগুলিতে উল্লেখযোগ্য কর্মক্ষমতা উন্নতি অর্জন করতে পারেন।