Multithreading Programing با jetworker در Javascript

همان طور که میدانید Javascript در یک Thread اجرا میشود و امکان Multithreading Programing قبل از اضافه شدن Web Worker ها موجود نبود. Web Worker یک Thread مجزا از Thread اصلی هست که شما میتوانید با Messages Passing بین Thread اصلی و Thread مربوط به Web Worker پیغام ردوبدل کنید این پیغام ها میتواند حاصل نتیجه یک پردازش سنگین سمت Web Worker باشد. یکی از دلایل اصلی Multithreading Programing تقصیم بندی وظایف سنگین بین Thread های مختلف هست و این موضوع در وب به ما کمک میکند وب سایت یا وب اپی توسعه دهیم که به دلیل کندی بعضی از پردازش ها کاربر با محصول کند روبرو نشود و به راحتی با محصول Interaction داشته باشد. کار کردن با Web Worker و مدیریت Task ها کار راحتی نیست اما شما می توانید با ماژول jetworker به راحتی Task ها را مدیریت کنید.

در ماژول jetworker دو Class اصلی داریم یکی از این Class ها Client نام دارد که وظیفه تعریف فایل Web Worker و صدا کردن توابع و دریافت جواب از Web Worker را دارد. Class بعدی Service نام دارد که برای تعریف توابع در Web Worker استفاده می شود. اما برای اینکه فرآیند استفاده از jetworker را راحتتر متوجه بشیم با یک مثال ساده مقاله را ادامه میدهیم.

فرض کنید ما تابعی داریم که به هر دلیل می خواهیم در Thread جداگانه ای اجرا شود فایلی نه نام worker.js ایجاد میکنیم فرض کنید تابع ما عمل ضرب دو عدد را انجام میدهد بعد از نصب jetworker کدهای زیر را در آن می نویسیم:

import Service from 'jetworker/service';
const service = new Service();
service.on(
    'multiple',
    (req, res) => res(req.a * req.b) 
 );

همانطور که در کد مشاهده میکنید ما با استفاده از Class Service در jetworker تابعی به نام multiple تعریف کردیم و در تابع مشخص کردیم که مقادیر a و b را از req دریافت و عمل ضرب را انجام دهد و با استفاده از res به Thread اصلی جواب را ارسال کند.

در طرف Thread اصلی هم کد زیر را خواهیم داشت:

import Client from 'jetworker/client';
const client = new Client('./worker.js');
client.emit(
    'multiple',
    { a: 2, b: 3 },
    data => console.log(data),
);

خوب ما با استفاده از Class Client در jetworker فایل Web Wroker را مشخص کردیم و با متد client.emit می توانید تابع موجود در Web Worker را صدا بزنیم مقدار اول این تابع، به نام تابع موجود در ‌Web Worker اشاره میکند مقدار دوم Data های هست که سمت Web Worker ارسال میکنیم و مقدار نهایی، تابعی هست که بعد از پاسخ Web Worker به Thread اصلی اجرا می شود در این تابع ما جواب حاصل ضرب را از Web Worker دریافت میکنم و در console چاپ میکنیم. به همین راحتی :)

البته این را در نظر بگیرید که مثالی که اشاره کردیم یک مثال فرضی هست و شما باید پردازش های سنگین و مورد نیاز به Thread را در jetworker استفاده نمایید. اما برای نحوه نصب و یا هر سوالی که در این خصوص داشتید میتوانید از دو لینک زیر استفاده نمایید.

https://github.com/uxitten/jetworker

https://www.npmjs.com/package/jetworker