Main Process এ Background Worker ব্যবহার

Background Process এবং Task Scheduling - ইলেকট্রন  (Electron) - Web Development

247

Electron অ্যাপ্লিকেশনে, Main Process সাধারণত অ্যাপ্লিকেশনের সমস্ত গুরুত্বপূর্ণ কার্যক্রম পরিচালনা করে, যেমন উইন্ডো তৈরি করা, ফাইল সিস্টেমে কাজ করা, নেটওয়ার্ক রিকোয়েস্ট পাঠানো ইত্যাদি। তবে, কিছু কাজ যেমন ভারী গণনা বা দীর্ঘস্থায়ী অপারেশন (যেমন ফাইল ইওপি, ডেটাবেস কুয়েরি, ইত্যাদি) সরাসরি Main Process-এ করা হলে অ্যাপ্লিকেশনের পারফরম্যান্সে প্রভাব ফেলতে পারে।

এক্ষেত্রে, Background Worker বা Worker Threads ব্যবহৃত হয়, যা Main Process-কে ভারী কাজ থেকে মুক্তি দিতে সাহায্য করে। এটি Node.js এর Worker Threads মডিউল ব্যবহার করে এবং Main Process এবং Renderer Process এর মধ্যে পারফরম্যান্স অপ্টিমাইজেশন করে।


১. Worker Threads কী?

Worker Threads হলো Node.js এর একটি ফিচার, যা আপনি সিঙ্গেল থ্রেডে বড় বড় কাজ না চালিয়ে, অন্য একটি থ্রেডে কাজ করতে ব্যবহার করতে পারেন। এটি ভারী গণনা বা ইনপুট/আউটপুট অপারেশন সম্পন্ন করার জন্য ব্যবহৃত হয়।

Electron অ্যাপ্লিকেশনে, আপনি Main Process-এ Worker Threads ব্যবহার করে ব্যাকগ্রাউন্ডে কাজ করতে পারেন, যাতে মূল UI থ্রেডে কোনও লকিং বা ব্লকিং না ঘটে।


২. Electron এ Worker Threads ব্যবহার করা

প্রথমে, আপনার Main Process-এ Worker Threads ইমপোর্ট করতে হবে। তারপর, আপনি কাজটি Worker Thread-এ পাঠিয়ে Main Process-কে অবাধ রাখতে পারবেন।

উদাহরণ: Worker Thread ব্যবহার করা

Main Process (main.js)

const { app, BrowserWindow } = require('electron');
const { Worker, isMainThread, parentPort } = require('worker_threads');

let mainWindow;

app.on('ready', () => {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true,
    },
  });

  mainWindow.loadFile('index.html');

  // Background Worker এর ব্যবহার
  if (isMainThread) {
    // যদি Main Thread এ থাকি, Worker Thread তৈরি করা
    const worker = new Worker(__filename); // একই স্ক্রিপ্ট ফাইল ব্যবহার করা হচ্ছে

    // Worker কে ডেটা পাঠানো
    worker.postMessage('Hello from Main Process');

    // Worker থেকে আসা মেসেজ গ্রহণ করা
    worker.on('message', (message) => {
      console.log('Main Thread থেকে Worker Thread থেকে মেসেজ:', message);
    });

    // Worker Error হ্যান্ডলিং
    worker.on('error', (error) => {
      console.error('Error from Worker:', error);
    });

    // Worker Process End হ্যান্ডলিং
    worker.on('exit', (code) => {
      if (code !== 0) {
        console.error(`Worker stopped with exit code ${code}`);
      }
    });
  }
});

এখানে Main Process থেকে একটি নতুন Worker তৈরি করা হচ্ছে। এই Worker অন্য একটি থ্রেডে কাজ করবে এবং Main Process এর সাথে মেসেজ আদান-প্রদান করবে।


Worker Thread - ব্যাকগ্রাউন্ড থ্রেড

const { parentPort } = require('worker_threads');

// Worker Thread থেকে আসা মেসেজ গ্রহণ করা
parentPort.on('message', (message) => {
  console.log('Worker Thread থেকে Main Process থেকে মেসেজ:', message);

  // Worker Thread থেকে মেসেজ পাঠানো
  parentPort.postMessage('Hello from Worker');
});

এখানে, Worker থ্রেড Main Process থেকে মেসেজ গ্রহণ করছে এবং সাড়া পাঠাচ্ছে। এই সাড়া Main Process এ ফিরে আসবে।


৩. বড় কাজের জন্য Worker Threads

আপনি যখন বড় বা দীর্ঘস্থায়ী কাজ করতে চান, যেমন বড় ফাইল পড়া, বড় ডেটা প্রসেসিং, বা কোনও ব্লকিং নেটওয়ার্ক অপারেশন, তখন সেগুলি Worker Thread-এ পাঠানোর মাধ্যমে মূল থ্রেড বা UI থ্রেড মুক্ত রাখা সম্ভব।

উদাহরণ: গণনা করা (ব্যাকগ্রাউন্ডে)

ধরা যাক, আপনি খুব বড় সংখ্যার গুণফল গণনা করতে চান যা UI থ্রেড ব্লক করবে না।

// WorkerThread.js - Worker Threads ফাইল
const { parentPort } = require('worker_threads');

function heavyComputation() {
  let result = 0;
  for (let i = 0; i < 1e9; i++) {
    result += i;
  }
  return result;
}

// Main Process থেকে মেসেজ গ্রহণ
parentPort.on('message', () => {
  const result = heavyComputation();
  parentPort.postMessage(`Calculation result: ${result}`);
});

এখানে, Worker Thread একটি ভারী গণনা কাজ করছে, যাতে Main Process UI বা অন্য কাজ থামিয়ে না থাকে।


৪. Main Process এ Worker Threads এর সাথে Communication

Worker Threads এবং Main Process এর মধ্যে IPC (Inter-Process Communication) ব্যবহার করা হয়। এটি তাদের মধ্যে ডেটা আদান-প্রদান করতে সাহায্য করে।

  • postMessage(): Worker Thread থেকে Main Process এ মেসেজ পাঠাতে ব্যবহার করা হয়।
  • on('message'): Worker Thread এ মেসেজ গ্রহণ করা হয়।
  • parentPort.postMessage(): Worker Thread থেকে সাড়া পাঠানো হয়।

সারাংশ

  • Worker Threads ব্যবহার করে Main Process থেকে ভারী গণনা বা দীর্ঘস্থায়ী কাজ ব্যাকগ্রাউন্ডে চালানো যায়, যাতে UI থ্রেডে কোনো ব্লকিং না ঘটে।
  • Worker Threads এবং Main Process এর মধ্যে IPC (Inter-Process Communication) এর মাধ্যমে মেসেজ আদান-প্রদান করা হয়।
  • Worker Threads ফাইলের মাধ্যমে থ্রেড তৈরি করা এবং কাজের পরে সেগুলি বন্ধ করা হয়।

এই পদ্ধতিতে আপনি আপনার Electron অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে পারেন এবং ব্যবহারকারীর অভিজ্ঞতা আরও মসৃণ এবং দ্রুত করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...