آیا Node.js یک single-threaded محسوب میشه؟ 🤟
در پست قبل به بررسی اینکه رشته یا thread چی هست پرداختیم، اما در این پست راجب این که رشته ها در Node.js به چه صورت هستن، صحبت میکنیم.
البته قبل از اینکه بدونیم Node.js تک رشته ای هست یا نه، ابتدا باید مفهوم single-threaded و multi-threaded ها رو متوجه بشیم.
single-threaded: اگه شما یک رستوران و یک گارسون داشته باشید، اون گارسون میتونه هربار فقط یک سفارش بگیره، یک غذا رو آماده کنه و به یک مشتری سرویس بده.
multi-threaded: حالا اگه همون رستوران چندتا گارسون داشته باشه، میتونه به صورت مستقل سفارش بیشتری بگیره و خدمات بیشتری ارائه بده.
اما Node.js واقعا تک رشته ای هست؟🤔
Node.js بخاطر معماری non-blocking و ایونت محور، اغلب باعث این تصور غلط میشه که ذاتا تک رشته ای هست، ولی خب یک نکته ریزه داره که برای درکش، ابتدا باید با ایونت لوپ ها آشنا بشید⬇️
در قلب Node.js، ایونت لوپ قرار داره و مکانیزمی هست که کالبک ها رو به صورت non-blocking، مدیریت و اجرا میکنه.این تک رشته به صورت مداوم ایونت هایی مثل درخواست های دریافتی، عملیات های I/O تکمیل شده یا منقضی شدن زمان رو بررسی میکنه، و هنگامی که یک ایونت شناسایی شد کالبک فانکشن های مربوطه رو در صف اجرا قرار میده، سپس ایونت لوپ این تماس هارو به ترتیب دریافت، و پردازش میکنه.
برای اینکه پست زیادی طولانی نشه، ادامه توضیحات رو داخل این تلگراف قرار دادیم، پیشنهاد میکنم از دست ندید :))
#nodejs #thread
@CodeModule
در پست قبل به بررسی اینکه رشته یا thread چی هست پرداختیم، اما در این پست راجب این که رشته ها در Node.js به چه صورت هستن، صحبت میکنیم.
البته قبل از اینکه بدونیم Node.js تک رشته ای هست یا نه، ابتدا باید مفهوم single-threaded و multi-threaded ها رو متوجه بشیم.
single-threaded: اگه شما یک رستوران و یک گارسون داشته باشید، اون گارسون میتونه هربار فقط یک سفارش بگیره، یک غذا رو آماده کنه و به یک مشتری سرویس بده.
multi-threaded: حالا اگه همون رستوران چندتا گارسون داشته باشه، میتونه به صورت مستقل سفارش بیشتری بگیره و خدمات بیشتری ارائه بده.
این توضیح ساده ای از هرکدوم بود، پیشنهاد میکنم این مقاله رو برای اطلاعات بیشتر بخونین :)
اما Node.js واقعا تک رشته ای هست؟
Node.js بخاطر معماری non-blocking و ایونت محور، اغلب باعث این تصور غلط میشه که ذاتا تک رشته ای هست، ولی خب یک نکته ریزه داره که برای درکش، ابتدا باید با ایونت لوپ ها آشنا بشید
در قلب Node.js، ایونت لوپ قرار داره و مکانیزمی هست که کالبک ها رو به صورت non-blocking، مدیریت و اجرا میکنه.این تک رشته به صورت مداوم ایونت هایی مثل درخواست های دریافتی، عملیات های I/O تکمیل شده یا منقضی شدن زمان رو بررسی میکنه، و هنگامی که یک ایونت شناسایی شد کالبک فانکشن های مربوطه رو در صف اجرا قرار میده، سپس ایونت لوپ این تماس هارو به ترتیب دریافت، و پردازش میکنه.
برای اینکه پست زیادی طولانی نشه، ادامه توضیحات رو داخل این تلگراف قرار دادیم، پیشنهاد میکنم از دست ندید :))
#nodejs #thread
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7😁4⚡2
همه چیز راجب thread-pool ها🔥
thread-pool ها مجموعه ای از رشته های کارگر (worker thread) هستن. اونها توسط یک زمانبندی مرکزی مديريت و وظایف (task) رو به pool ارسال میکنن و زمانبندی، اون هارو بین رشته های موجود برای اجرا توزیع میکنه. این مکانیزم امکان برنامه ریزی کارآمد و استفاده از منابع رو فراهم میکنه.
مزایای استفاده از thread-pool⬇️
کاهش overhead : ساخت و از بین بردن رشته ها میتونه پرهزینه باشه. thread-pool با استفاده مجدد از رشته ها، باعث میشه overhead کاهش پیدا کنه.
بهبود عملکرد : thread-pool ها میتونن با توزیع وظایف بین چندین رشته، عملکرد برنامه رو بهبود ببخشند.
سادگی استفاده : thread-pool با استفاده از concurrency، برنامه ها رو ساده تر میکنه.
برای درک بهتر به مثال زیر توجه کنید⬇️
اگه بخوایم از thread-pool استفاده نکنیم، هربار که این تابع رو فراخوانی میکنیم یک رشته جدید ساخته میشه، که منجر به overhead بالا و عملکرد ضعیف میشه. اما با استفاده از thread-pool رشته ها میتونن مجددا استفاده بشن و وظایف بین اونها، توزیع میشه. این امر منجر به overhead پایینتر و عملکرد بهتر میشه.
برای اینکه پست زیادی طولانی نشه، سایر مثال و نکات، و همچنین نحوه استفاده از thread-pool در پروژه واقعی رو در تلگراف قرار دادیم :))
#nodejs #thread #thread_pool
@CodeModule
thread-pool ها مجموعه ای از رشته های کارگر (worker thread) هستن. اونها توسط یک زمانبندی مرکزی مديريت و وظایف (task) رو به pool ارسال میکنن و زمانبندی، اون هارو بین رشته های موجود برای اجرا توزیع میکنه. این مکانیزم امکان برنامه ریزی کارآمد و استفاده از منابع رو فراهم میکنه.
مزایای استفاده از thread-pool
کاهش overhead : ساخت و از بین بردن رشته ها میتونه پرهزینه باشه. thread-pool با استفاده مجدد از رشته ها، باعث میشه overhead کاهش پیدا کنه.
بهبود عملکرد : thread-pool ها میتونن با توزیع وظایف بین چندین رشته، عملکرد برنامه رو بهبود ببخشند.
سادگی استفاده : thread-pool با استفاده از concurrency، برنامه ها رو ساده تر میکنه.
برای درک بهتر به مثال زیر توجه کنید
const crypto = require('crypto')
const start = Date.now()
crypto.pbkdf2('a','b',10000,512,'sha512',()=>{
console.log('1:',Date.now() - start);
})
crypto.pbkdf2('a','b',10000,512,'sha512',()=>{
console.log('2:',Date.now()- start);
})
crypto.pbkdf2('a','b',10000,512,'sha512',()=>{
console.log('3:',Date.now()- start);
})
crypto.pbkdf2('a','b',10000,512,'sha512',()=>{
console.log('4:',Date.now()- start);
})
crypto.pbkdf2('a','b',10000,512,'sha512',()=>{
console.log('5:',Date.now()- start);
})
تابع PBKDF2 اکثرا برای رمزنگاری رشته ها استفاده میشه.
اگه بخوایم از thread-pool استفاده نکنیم، هربار که این تابع رو فراخوانی میکنیم یک رشته جدید ساخته میشه، که منجر به overhead بالا و عملکرد ضعیف میشه. اما با استفاده از thread-pool رشته ها میتونن مجددا استفاده بشن و وظایف بین اونها، توزیع میشه. این امر منجر به overhead پایینتر و عملکرد بهتر میشه.
برای اینکه پست زیادی طولانی نشه، سایر مثال و نکات، و همچنین نحوه استفاده از thread-pool در پروژه واقعی رو در تلگراف قرار دادیم :))
#nodejs #thread #thread_pool
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡7🔥5😁3