জাভাস্ক্রিপ্ট সহজাতভাবে একটি একক-থ্রেডেড বিস্ট হিসাবে ডিজাইন করা হয়েছে। তবুও, কম্পিউটিংয়ের বন্য ভূখণ্ডে, 'মাল্টিপ্রসেসিং' এবং 'মাল্টি-কোর প্রসেসর' নামে পরিচিত শিকারীরা নিয়ন্ত্রণ করার জন্য অপেক্ষা করছে, আপনার কোড এক্সিকিউশনকে না শোনা গতিতে বাড়িয়ে দিতে প্রস্তুত। 💪🚀
আমি এই জঙ্গলে পা রাখার সাহস করেছিলাম, আমার কোডটি চূড়ান্ত টিকে থাকার পরীক্ষায় রেখেছিলাম এবং বিস্ময়কর ফলাফল নিয়ে আবির্ভূত হয়েছিলাম। 🏆 এখন, এই চিত্তাকর্ষক অনুসন্ধানে আমার সাথে যোগ দেওয়ার পালা আপনার। আমরা Node.js-এ মাল্টিপ্রসেসিং এর রহস্যের গভীরে প্রবেশ করব, riveting কোড উদাহরণ দিয়ে সজ্জিত এবং আমার পরীক্ষা-নিরীক্ষার দর্শনীয় ফলের উপর টর্চ 🔦 জ্বালিয়ে রাখব। 🍎🍏
মাল্টিপ্রসেসিংয়ের জাদুতে সুপারচার্জিং জাভাস্ক্রিপ্ট পারফরম্যান্সের এই অ্যাড্রেনালাইন-ফুয়েলড অ্যাডভেঞ্চারে যাত্রা করার জন্য প্রস্তুত হন! আমরা হাই-অকটেন কোডিং-এর মন্ত্রমুগ্ধ রাজ্যে লঞ্চ করতে চলেছি বলে নিজেকে সামলে নিন।
আমরা খুব গভীরে যাওয়ার আগে, আসুন কিছু বিশ্বস্ত সরঞ্জাম দিয়ে নিজেদেরকে সজ্জিত করি। প্রায়শই কঠিন কম্পিউটেশনাল কাজ অনুকরণ করতে আমরা কয়েকটি সহায়ক ফাংশন তৈরি করব। আসুন একটি নতুন আর্টিফ্যাক্ট তৈরি করি, utils.js
নামে একটি ফাইল, এবং সেখানে এই প্রয়োজনীয় মন্ত্রগুলি লিখুন৷
// utils.js function generateRandomData(size) { const data = []; for (let i = 0; i < size; i++) { data.push(Math.random()); } return data; } function processData(data) { // performs some calculations on the array // to simulate high resource intensity let sum = 0; for (let num of data) { for (let j = 0; j < 1000000; j++) { sum += Math.sqrt(num); } } return sum; } module.exports = { generateRandomData, processData, };
একটি একক থ্রেডে কার্যকর করা সমস্যা সমাধানের জন্য একটি কঠোর পরিশ্রমী এবং নির্ভরযোগ্য পদ্ধতির প্রতিনিধিত্ব করে। স্ক্রিপ্টের একক-থ্রেডেড সংস্করণকে দৃশ্যত বর্ণনা করা যেতে পারে। একক-থ্রেডেড সংস্করণের কোডটি বেশ সহজবোধ্য। আমরা ডেটা তৈরি করি এবং প্রক্রিয়াকরণের জন্য পাঠাই।
// sync.js const { generateRandomData, processData } = require("./utils"); const data = generateRandomData(30000); console.time("single-thread. Time:"); processData(data); console.timeEnd("single-thread. Time:");
আমরা কমান্ড দিয়ে স্ক্রিপ্ট চালু করি: node sync.js
আমরা অপেক্ষা করছি... এবং অপেক্ষা করছি... এবং অপেক্ষা করছি...
এবং এই সমস্ত অপেক্ষার পরে, আমরা স্ক্রিপ্টের সম্পাদনের সময় নির্দেশ করে একটি বার্তা পাই।
single-thread. Time:: 25.888s
এই পদ্ধতিটি বেশিরভাগ ক্ষেত্রেই বিলের সাথে খাপ খায়। কিন্তু একটা হেঁচকি আছে। কে, সঠিক মনে, অপেক্ষা শিল্প adores? এই যন্ত্রণাদায়ক বিলম্ব কাটিয়ে উঠতে, আমাদের কম্পিউটারের সম্পূর্ণ ফায়ার পাওয়ার ব্যবহার করা উচিত! সর্বোপরি, বেশিরভাগ আধুনিক কম্পিউটারগুলি একক সিপিইউ কোরের চেয়ে বেশি লোড হয়!
সুতরাং, কেন আমরা সেই অতিরিক্ত কোরগুলিকে নিষ্ক্রিয় থাকতে দেওয়া উচিত যখন তারা সংখ্যা ক্রাঞ্চ করে এবং আমাদের কোড এক্সিকিউশনকে সুপারচার্জ করতে পারে? এই ঘুমন্ত দৈত্যদের আলোকিত করার এবং মাল্টিপ্রসেসিংয়ের কাঁচা শক্তি আনলক করার সময়! এর মধ্যে ডুব দেওয়া যাক!
মাল্টিপ্রসেসড পন্থা অবলম্বন করে, আমরা আমাদের সিপিইউ-এর একাধিক কোরকে লিভারেজ করতে পারি, আমাদের স্ক্রিপ্টের পারফরম্যান্সকে বেশ কয়েকটি ভাঁজ করে। আমাদের মাল্টিপ্রসেসড কোডের অপারেশনের প্রক্রিয়াটি এই ডায়াগ্রামের সাহায্যে কল্পনা করা যেতে পারে।
সংক্ষেপে, আমরা কেবল একটি বড় ডেটাসেটকে সেগমেন্টে বিভাজন করছি এবং প্রতিটি সেগমেন্টকে একটি পৃথক CPU কোরে প্রক্রিয়াকরণের জন্য বরাদ্দ করছি।
multi-process.js
শিরোনামের একটি ফাইল তৈরি করুন এবং নিম্নলিখিত বিষয়বস্তু দিয়ে এটি পূরণ করুন।
// multi-process.js const childProcess = require("child_process"); const utils = require("./utils"); const data = utils.generateRandomData(30000); const chunkSize = Math.ceil(data.length / 4); const chunks = []; for (let i = 0; i < 4; i++) { const start = i * chunkSize; const end = start + chunkSize; chunks.push(data.slice(start, end)); } console.time("multiProcessed"); const workers = []; let results = []; // result collection array for (let i = 0; i < chunks.length; i++) { const worker = childProcess.fork("./worker.js"); // pass its number and data to the workflow worker.send({ workerNumber: i, data: chunks[i] }); workers.push( new Promise((resolve, reject) => { worker.on("message", (result) => { results.push(result); // add the result to the result array resolve(); }); worker.on("error", reject); worker.on("exit", (code) => { if (code !== 0) { reject(new Error(`Worker stopped with exit code ${code}`)); } }); }) ); } Promise.all(workers) .then(() => { console.timeEnd("multiProcessed"); console.log("Processing results:", results); }) .catch((err) => console.error(err));
এই কোডটি Node.js-এ মাল্টি-প্রসেসড ডেটা হ্যান্ডলিং এর সিম্ফনিতে একক কর্মী প্রক্রিয়ার অর্কেস্ট্রেশন প্রকাশ করে।
সংক্ষেপে, এখানে যা ঘটছে:
কর্মী process.on('message')
এর মাধ্যমে মূল প্রক্রিয়া থেকে ডেটা এবং এর নম্বর গ্রহণ করে।
processData
ফাংশন এই কর্মীকে বরাদ্দ করা ডেটার অংশের উপর গণনা করে।
ফলাফল `process.send()`` এর মাধ্যমে মূল প্রক্রিয়ায় ফেরত পাঠানো হয়।
কর্মী process.exit()
এর মাধ্যমে কোড 0 দিয়ে শেষ করে।
কমান্ড দিয়ে স্ক্রিপ্ট ফায়ার আপ করুন: node multi-process.js
টার্বো বুস্টের জন্য শক্ত করে ধরে রাখুন...
এবং আমরা উপসংহারে পাই যে কোডটি 5 সেকেন্ডে কাজ করেছে!
Worker 0 started Worker 1 started Worker 2 started Worker 3 started ==================== Worker 1 finished ==================== Worker 2 finished ==================== Worker 3 finished ==================== Worker 0 finished multiProcessed: 5.266s Processing results: [ 4971422688.053512, 4989646323.157899, 4999088030.661542, 5008034869.924775 ]
আমাদের স্ক্রিপ্ট চারগুণ দ্রুত কাজ করেছে! এটা কি মহৎ নয়?
একটি উৎসুক কৌতূহলের সাথে, আমি একটি 4-কোর প্রসেসরের সাথে আশীর্বাদিত একটি কম্পিউটারে দুটি স্ক্রিপ্টই চালালাম, যাদুটির প্রকাশ দেখার জন্য অপেক্ষা করছি:
একক শিল্পী, আমাদের একক-থ্রেডেড স্ক্রিপ্ট, 25.8 সেকেন্ডের মধ্যে পরিশ্রমের সাথে ডেটা প্রক্রিয়া করেছে৷
পাওয়ার-প্যাকড দল, আমাদের মাল্টি-থ্রেডেড স্ক্রিপ্ট, এটিকে মাত্র 5.2 সেকেন্ডে পার্ক থেকে ছিটকে দিয়েছে!
মাল্টিপ্রসেসিংয়ের শক্তি দেখুন - গণনার গতি চারগুণ করার চেয়েও বেশি!
এই সম্পূর্ণ বৈপরীত্যগুলি হাইলাইট করে যে কীভাবে মাল্টিপ্রসেসিং আপনার মেশিনের গণনাগত ক্ষমতাকে ব্যাপকভাবে প্রসারিত করতে পারে এবং কার্যকর করার সময় কমিয়ে দিতে পারে।
আমাদের রোমাঞ্চকর অনুসন্ধান Node.js-এ মাল্টিপ্রসেসিং কম্পিউটেশনাল কাজগুলিকে কীভাবে টার্বোচার্জ করতে পারে তার একটি প্রাণবন্ত চিত্র পেইন্ট করে৷ প্রতিটি একক প্রসেসর কোরে আপনার কোডটি প্রকাশ করা কার্যক্ষমতায় একটি বাস্তব লাফ দেয়, যা হাঁটা থেকে টেলিপোর্টেশনে স্থানান্তরিত করার মতো!
আপনার কোডিং কম্পনে এই তীরটি যোগ করা এবং আপনার প্রকল্পগুলিতে এই পদ্ধতির সাথে পরীক্ষা করা অবশ্যই মূল্যবান। এবং Node.js-এ ওয়ার্কার থ্রেডের আবির্ভাবের সাথে, মাল্টিপ্রসেসিং বাস্তবায়ন একটি হাওয়া হয়ে গেছে।
এই পড়া একটি অ্যাড্রেনালিন রাশ পেয়েছেন? নিচের মন্তব্যে Node.js-এ মাল্টিপ্রসেসিং সহ আপনার নিজের অ্যাডভেঞ্চারগুলি নির্দ্বিধায় শেয়ার করুন! আসুন একসাথে হাই-স্পিড কোডিং এর রহস্য উন্মোচন করা চালিয়ে যাই।