محمد حسین خداخواه
محمد حسین خداخواه
خواندن ۲ دقیقه·۱۵ ساعت پیش

ورکر ها در نود جی اس ,workers in node js

کارگر ؟؟ بعله کارگر . . .

کارگر داریم توی نود جی اس . . .البته توی کل جاوااسکریپت داریم ولی خب حالا نمیخام دیپ بشم روش

اما در کل کارگر چیه؟؟؟

ببین اگر پایتونو بشناسی میدونی که مولتی ترده(multi threads) اما جاوااسکریپت نه. هی روزگار چرا نه ؟ جاوا اسکریپت کلا سینگل ترده دیگه اینو همه میدونن

تماااااام کد رو یه ترد(thread) اجرا میشه به ترتیبی که خودش میدونه (به ما مربوط نیست!)

اماااااا. . .

اما اینجاش قشنگه که درسته که جاوااسکریپت single thread میباشد و همه چی رو یه نخ یا ترد اجرا میشه ولی میتونیم یه جورایی مولتی ترد بنویسیمش.

با چی؟ با کی؟ چطوری؟؟

با حمالای جاوااسکریپت یا همون (worker threads) .



ورکر ها اجرای موازی کد جاوا اسکریپت رو با استفاده از رشته ها ساده میکنه و به طرز عجیب و جالب و واااااوی سریعتر و کارآمد تره والا.

به دلیل ویژگی های زیر(به نقل از https://www.simplilearn.com/tutorials/nodejs-tutorial/nodejs-worker-threads) به درد میخورن :

این یک فرآیند واحد را با چندین رشته اجرا می کند.

یک نمونه موتور JS را در هر رشته اجرا می کند.

یک حلقه رویداد را در هر رشته اجرا می کند.

یک نمونه Node.js را در هر رشته اجرا می کند.

برای شروع، باید Node.js خود را به نسخه جدیدتر به روز کنیم.

دلایل بالا رو کپی کردم.(گفتم که حلال باشه)

این یه مثال از وروکر ساختنه

const { WorkerData, parentPort } = require('worker_threads')

parentPort.postMessage({ welcome: WorkerData })

حالا اینو ساختیم یه جا باید صداش بزنیم در هر صورت دیگه. صداش میزنیم که اینم شروع کنه به کار اما رو یه رشته یا نخ یا ترد یا هرچی دیگه کاری که ما میخایم جدا از پردازش اصلیمون انجام بشه رو برامون انجام بده.

اینم اونجایی که مثلا میشه کد پردازش اصلیمون و اون حمالمونو صدا میزنیم. . .

const { Worker } = require('worker_threads')

const runService = (WorkerData) => {

return new Promise((resolve, reject) => {

const worker = new Worker('./workerExample.js', { WorkerData });

worker.on('message', resolve);

worker.on('error', reject);

worker.on('exit', (code) => {

if (code !== 0)

reject(new Error(`stopped with  ${code} exit code`));

})

})

}

const run = async () => {

const result = await runService('hello node.js')

console.log(result);

}

run().catch(err => console.error(err))


توضیحات بیشتر رو تو مقاله های بعدی خواهم داد.اما خب برا اونا که نمیدونستن بگم که کلییییییییی خوش به حالتونه ازین به بعد که میدونید. قراره کلی عشق کنید.

مرسی ازینکه مقالمو خوندین. . .مقاله ی خاصی هم نبود بیشتر شبیه یه خبر بود اما خب قراره مقاله ی بعدی تا فی ها خالدونشو بریزم بیرون براتون.

من حسینم . یه بک اند کار ساده . . .

یا علی

جاوا اسکریپتworkerjavascriptmultithreadingnodejs
what can i say i am just a backend developer
شاید از این پست‌ها خوشتان بیاید