Practical উদাহরণ: Parallel এবং Concurrent Execution

Promise API (Advanced) - জাভাস্ক্রিপ্ট ইএস৬ (ES6) - Web Development

355

Parallel এবং Concurrent Execution এর মধ্যে পার্থক্য এবং তাদের ব্যবহার ES6 এর নতুন ফিচারগুলি, বিশেষ করে Promises, async/await, এবং Generators ব্যবহার করে বাস্তবায়িত করা যেতে পারে। এই দুটি ধারণা সম্পর্কে কিছু মৌলিক কথা জানার পর, আমরা দেখব কীভাবে ES6 এর ফিচারগুলি ব্যবহার করে এই কাজগুলোকে কার্যকরী করা যায়।


Parallel Execution:

Parallel Execution এর মানে হল একাধিক কাজ একই সময়ে চালানো। এটি তখন ব্যবহার করা হয় যখন আমাদের একাধিক সম্পূর্ণ স্বাধীন কাজ একে অপরের সাথে কোনো সম্পর্ক ছাড়াই একসাথে চলতে পারে।

ES6 এ, Promise ব্যবহার করে একাধিক asynchronous অপারেশনকে একসাথে চালানো সম্ভব হয়।

Parallel Execution Using Promises:

// Simulating two independent API calls
function fetchData1() {
  return new Promise((resolve) => {
    setTimeout(() => resolve('Data from API 1'), 2000);
  });
}

function fetchData2() {
  return new Promise((resolve) => {
    setTimeout(() => resolve('Data from API 2'), 3000);
  });
}

// Parallel execution using Promise.all
Promise.all([fetchData1(), fetchData2()])
  .then((results) => {
    console.log('Parallel Execution Results:');
    console.log(results[0]);  // Data from API 1
    console.log(results[1]);  // Data from API 2
  })
  .catch((error) => console.error('Error in Parallel Execution:', error));

এখানে, fetchData1() এবং fetchData2() ফাংশন দুটি Promise রিটার্ন করে এবং আমরা Promise.all() ব্যবহার করে একে অপরের উপর নির্ভর না করে একসাথে তাদের ফলাফল পেতে পারি। Promise.all() মেথড একাধিক Promise এর সাথে কাজ করতে সাহায্য করে, এবং সমস্ত Promises সফল হলে তা রিটার্ন হয়।


Concurrent Execution:

Concurrent Execution এর মানে হল একাধিক কাজ একসাথে শুরু হলেও এগুলো কখনো একসাথে সম্পন্ন হয় না। এগুলোর মধ্যে কিছু সময়ের ব্যবধান থাকতে পারে, এবং এগুলোর মধ্যে কিছু কাজ একে অপরের সাথে সমান্তরাল হতে পারে।

Async/Await ব্যবহার করে আমরা সিমুলেট করতে পারি concurrent কার্যকলাপ, যেখানে একাধিক কাজের মধ্যে নির্দিষ্ট সময়ের পার্থক্য থাকে।

Concurrent Execution Using Async/Await:

async function fetchData() {
  console.log("Fetching data...");

  const result1 = fetchData1();  // API 1
  const result2 = fetchData2();  // API 2

  // Wait for both promises to resolve concurrently
  const data = await Promise.all([result1, result2]);

  console.log('Concurrent Execution Results:');
  console.log(data[0]);  // Data from API 1
  console.log(data[1]);  // Data from API 2
}

fetchData();

এখানে, fetchData() ফাংশনটি async এবং await এর মাধ্যমে দুইটি API কলকে একসাথে শুরু করেছে। তবে, await ব্যবহার করা হয়েছে Promise.all() এর সাথে, যার মাধ্যমে আমরা একসাথে প্রতিটি API কলের ফলাফল পাওয়ার জন্য অপেক্ষা করছি।


Generators and Asynchronous Programming for Concurrent Execution:

Generators ES6 এর একটি উন্নত ফিচার যা asynchronous programming সহজ করে তোলে। এটি concurrent কাজগুলিকে আরও কার্যকরভাবে সম্পাদন করতে সাহায্য করে, যেখানে আমরা কাজের বিভিন্ন ধাপকে নিয়ন্ত্রণ করতে পারি।

Concurrent Execution Using Generators:

function* fetchConcurrentData() {
  const data1 = yield fetchData1();
  console.log(data1);

  const data2 = yield fetchData2();
  console.log(data2);
}

const generator = fetchConcurrentData();

generator.next().value.then((data1) => {
  generator.next(data1).value.then((data2) => {
    generator.next(data2);
  });
});

এখানে, আমরা Generator ফাংশন ব্যবহার করে fetchData1() এবং fetchData2() এর concurrent execution তৈরি করেছি। যদিও এগুলো concurrent হতে পারে, কিন্তু আমরা প্রতিটি ধাপে অপেক্ষা করি এবং next() মেথড ব্যবহার করে একে একে এগুলো চালাই।


Summary of Parallel and Concurrent Execution in ES6

  • Parallel Execution: একাধিক asynchronous কাজ একে অপরের সাথে চলতে পারে। এর জন্য Promise.all() ব্যবহার করা হয়।
  • Concurrent Execution: একাধিক কাজ একসাথে শুরু হলেও, তারা সমান্তরালভাবে সম্পন্ন হয় না। Async/Await এবং Generators এর মাধ্যমে আমরা concurrent execution সহজে বাস্তবায়ন করতে পারি।

এসব টেকনিক এবং ফিচারগুলি আমাদের কোডকে আরও কার্যকর, পরিষ্কার এবং পারফরম্যান্ট করে তোলে, বিশেষ করে যখন আমাদের একাধিক asynchronous কাজ সমান্তরালে বা পাশাপাশি চালাতে হয়।

Content added By
Promotion

Are you sure to start over?

Loading...