Code & Life
Photo
Although the description above doesn’t actively mention the profiler, it works behind the scenes, identifying the “hot” code parts that are then passed to the Turbofan compiler. Turbofan is the JIT compiler within the V8 engine responsible for optimizing these “hot code” sections. It transforms them into machine code tailored to the specific architecture, ensuring optimal performance.
In summary, the profiler receives bytecode from the interpreter and passes the identified “hot” sections to the Turbofan compiler for transformation into machine code. This machine code is designed to deliver efficient performance on the target architecture.
@erfuuan_dev
In summary, the profiler receives bytecode from the interpreter and passes the identified “hot” sections to the Turbofan compiler for transformation into machine code. This machine code is designed to deliver efficient performance on the target architecture.
@erfuuan_dev
✍1
Code & Life
https://dev.to/jps27cse/exploring-asynchronous-javascript-callbacks-promises-and-asyncawait-16k6
یه توضیح کوتاه درباره JavaScript: Callbacks, Promises, and Async/Await
✍1
Forwarded from Node Master (NoName)
خیلی از دوستانی که من میشناسم اکثرا به صورت self thought بودن و از رشته های دیگ وارد برنامه نویسی شدن.
بخاطر همین موضوع ممکنه یکم سردرگمی برای دوستان پیش بیاد درمورد مفاهیم پایه ای تر مربوط به Computer science و البته شما چه frontend یا backend باشید هرچقد در این مفاهیم عمیق تر باشید در بازار کار به شما Competitive advantage میده و کار پیدا کردن برای شما خیلی راحت تر میشه و این موضوع رو هم قشنگ حس میکنید.
نکته بعدی این که این مسیر به هیچ عنوان یک مسیر یک شب یک ماه و یک ساله نیست و سال ها زمان بر هست و این شما هستین که تصمیم میگرید چقدر برای شما کافی هست با توجه به علاقه شما. میتونید این ها رو ندونید و درآمد قابل قبولی هم داشته باشید ولی اگر قصد پیشرفت دارید این مفاهیم از واجبات هست.
خودم هم در همین مسیر هستم و دارم یاد میگیرم و از این منابع استفاده میکنم و امیدوارم براتون مفید باشه و کورس ها و نکاتی هم که اینجا میگم باتوجه به سطحی که حس میکنید دارید انتخاب کنید و ببینید.
- همیشه هروقت کسی از من درمورد مسیر Backend سوال میپرسه من تاکید خیلی زیادی روی database و database design دارم.
https://downloadly.ir/elearning/video-tutorials/complete-intro-to-databases/
https://downloadly.ir/elearning/video-tutorials/complete-intro-to-sql-postgresql/
و اگر سطح خوبی دارید و میخواید deep تر بشید قطعا این چنل یوتیوب یک طلا درمورد database ها هست بیشتر از زاویه آکادمیک به مسائل نگاه میکنه و خب برای باتجربه تر ها خیلی مناسب هست.
https://www.youtube.com/@CMUDatabaseGroup
- موضوع بعدی networking هست. شما چه frontend باشی یا backend باید و باید OSI Model رو به صورت قلبی درک کرده باشی و البته در حد پایه ای network رو بشناسین شاید شما بگی من فرانت هستم لازم نداره. ممکنه این موضوع مستقیم تاثیری روی کار شما نداشته باشه ولی وقتی همکار devops شما اگر ازتون سوالی پرسید میتونید باهاش همکاری کنید مثل مجسمه خشک به همکارتون نگاه نمیکنید و این خیلی نکته مثبتی هست.
https://downloadly.ir/elearning/video-tutorials/introduction-to-computer-networking-2-hour-crash-course/
این دوره خیلی کوتاه هست و برای خیلی ها کافی هست و بیشتر نیازی نیست پیش برید ولی برای همه لازم هست. بقیه بیشتر برای عمیق تر شدن و علاقه هست.
https://downloadly.ir/elearning/video-tutorials/comptia-network-n10-008-full-course-practice-exam-1/
https://www.goodreads.com/book/show/59147607-computer-networking-global-edition
این کتاب که پایین میزارم یک خورده قدیمی هست و اگر میخواید مطالعه کنید یکم دقت کنید. درکل کتاب باارزشی هست.
https://www.goodreads.com/book/show/505564.The_TCP_IP_Guide
در ادامه از این دو repo سعید کنید الهام بگیرد برای مطالعه و deep تر شدن.
https://github.com/ossu/computer-science
https://github.com/jwasham/coding-interview-university
مفاهیم دیگه ای که در آینده با هم منابع مهمشون رو برسی میکنیم مثل سیستم عامل و مفاهیم low level تر مثل Computer architecture.
یک نکته دیگ این که اگر حس میکنید من میتونم به شما کمکی کنم در هرموردی میتونید PV به من پیام بدین و من خیلی خوشحال میشم اگر بتونم کمکی کنم.
#Course #Book #Guide
بخاطر همین موضوع ممکنه یکم سردرگمی برای دوستان پیش بیاد درمورد مفاهیم پایه ای تر مربوط به Computer science و البته شما چه frontend یا backend باشید هرچقد در این مفاهیم عمیق تر باشید در بازار کار به شما Competitive advantage میده و کار پیدا کردن برای شما خیلی راحت تر میشه و این موضوع رو هم قشنگ حس میکنید.
نکته بعدی این که این مسیر به هیچ عنوان یک مسیر یک شب یک ماه و یک ساله نیست و سال ها زمان بر هست و این شما هستین که تصمیم میگرید چقدر برای شما کافی هست با توجه به علاقه شما. میتونید این ها رو ندونید و درآمد قابل قبولی هم داشته باشید ولی اگر قصد پیشرفت دارید این مفاهیم از واجبات هست.
خودم هم در همین مسیر هستم و دارم یاد میگیرم و از این منابع استفاده میکنم و امیدوارم براتون مفید باشه و کورس ها و نکاتی هم که اینجا میگم باتوجه به سطحی که حس میکنید دارید انتخاب کنید و ببینید.
- همیشه هروقت کسی از من درمورد مسیر Backend سوال میپرسه من تاکید خیلی زیادی روی database و database design دارم.
https://downloadly.ir/elearning/video-tutorials/complete-intro-to-databases/
https://downloadly.ir/elearning/video-tutorials/complete-intro-to-sql-postgresql/
و اگر سطح خوبی دارید و میخواید deep تر بشید قطعا این چنل یوتیوب یک طلا درمورد database ها هست بیشتر از زاویه آکادمیک به مسائل نگاه میکنه و خب برای باتجربه تر ها خیلی مناسب هست.
https://www.youtube.com/@CMUDatabaseGroup
- موضوع بعدی networking هست. شما چه frontend باشی یا backend باید و باید OSI Model رو به صورت قلبی درک کرده باشی و البته در حد پایه ای network رو بشناسین شاید شما بگی من فرانت هستم لازم نداره. ممکنه این موضوع مستقیم تاثیری روی کار شما نداشته باشه ولی وقتی همکار devops شما اگر ازتون سوالی پرسید میتونید باهاش همکاری کنید مثل مجسمه خشک به همکارتون نگاه نمیکنید و این خیلی نکته مثبتی هست.
https://downloadly.ir/elearning/video-tutorials/introduction-to-computer-networking-2-hour-crash-course/
این دوره خیلی کوتاه هست و برای خیلی ها کافی هست و بیشتر نیازی نیست پیش برید ولی برای همه لازم هست. بقیه بیشتر برای عمیق تر شدن و علاقه هست.
https://downloadly.ir/elearning/video-tutorials/comptia-network-n10-008-full-course-practice-exam-1/
https://www.goodreads.com/book/show/59147607-computer-networking-global-edition
این کتاب که پایین میزارم یک خورده قدیمی هست و اگر میخواید مطالعه کنید یکم دقت کنید. درکل کتاب باارزشی هست.
https://www.goodreads.com/book/show/505564.The_TCP_IP_Guide
در ادامه از این دو repo سعید کنید الهام بگیرد برای مطالعه و deep تر شدن.
https://github.com/ossu/computer-science
https://github.com/jwasham/coding-interview-university
مفاهیم دیگه ای که در آینده با هم منابع مهمشون رو برسی میکنیم مثل سیستم عامل و مفاهیم low level تر مثل Computer architecture.
یک نکته دیگ این که اگر حس میکنید من میتونم به شما کمکی کنم در هرموردی میتونید PV به من پیام بدین و من خیلی خوشحال میشم اگر بتونم کمکی کنم.
#Course #Book #Guide
دانلود رایگان نرم افزار
Complete Intro to Databases - Frontend Masters - دانلود رایگان نرم افزار
دانلود Complete Intro to Databases، یک دوره آموزش مقدماتی پایگاه داده شامل آموزش پایگاه های داده MongoDB، PostgreSQL، Neo4j و Redis
But it will be foolish to assume that since we have a garbage collector to clear the memory for us, we shouldn't worry about memory management because there is no perfect system.
@erfuuan_dev
@erfuuan_dev
✍1
3 common memory Leaks
Global Variables
var a =1;
var b=1;
var c=1;
Here if I just keep adding these variables to my memory, all our memory is will eventually get used up because we are just using up memory. Imagine if these were deeply nested objects, we will be using up a lot of memory.
Event Listeners
var element = document.getElementById(‘button’)
element.addeventListener(‘click’, onClick)
This is a common way to leak memory because you can just keep adding event listeners and you don't remove them when you no longer need them. They will stay in the background and before you know, you have a memory leak.
setInterval()
If we put objects inside a setInterval(), they will never be garbage collected unless we remove the setInterval itself.
setInterval( () => { //referencing objects })
So something to keep in mind is that memory is limited. When it comes to a call stack and memory Heap, those are two places is where javascript runs and stores memory. So we have to be careful not to have memory leaks or stack overflow if we are to have efficient code.
@erfuuan_dev
Global Variables
var a =1;
var b=1;
var c=1;
Here if I just keep adding these variables to my memory, all our memory is will eventually get used up because we are just using up memory. Imagine if these were deeply nested objects, we will be using up a lot of memory.
Event Listeners
var element = document.getElementById(‘button’)
element.addeventListener(‘click’, onClick)
This is a common way to leak memory because you can just keep adding event listeners and you don't remove them when you no longer need them. They will stay in the background and before you know, you have a memory leak.
setInterval()
If we put objects inside a setInterval(), they will never be garbage collected unless we remove the setInterval itself.
setInterval( () => { //referencing objects })
So something to keep in mind is that memory is limited. When it comes to a call stack and memory Heap, those are two places is where javascript runs and stores memory. So we have to be careful not to have memory leaks or stack overflow if we are to have efficient code.
@erfuuan_dev
Forwarded from Node Master (Iman Hosseini Pour)
دنبال یک بهانه بودم که دوتا از بزرگترین و مهم ترین کتاب های computer science رو معرفی کنم.
خودم کامل نتونستم هردو رو بخونم چون به شدت سنگین هستن و وقت گیر.
در این توییت به این کتاب ها با یک داستان درمورد لینوکس و شخص سازندش یعنی لینوس توروالدز اشاره میکنم نقطه مشترکشون با این کتاب ها رو میگم
https://x.com/imanhpr_media/status/1854096388641996939?t=g2nNlKxcScFHFab8BUeELA&s=09
#Book
خودم کامل نتونستم هردو رو بخونم چون به شدت سنگین هستن و وقت گیر.
در این توییت به این کتاب ها با یک داستان درمورد لینوکس و شخص سازندش یعنی لینوس توروالدز اشاره میکنم نقطه مشترکشون با این کتاب ها رو میگم
https://x.com/imanhpr_media/status/1854096388641996939?t=g2nNlKxcScFHFab8BUeELA&s=09
#Book
✍1
Difference between Process and Thread
Process is isolated but Threads share resources(data, code, files,memory).
Processes work in complete isolation from each other, that is, they use different resources, but Threads share the same resources .
If one process is blocked, then no other process can execute.
If 1 Process is blocked, the others will not work until it is unblocked, but
if 1 Thread is blocked, the other one can do its work.
Changes to the parent process does not affect child processes.
A change in the Parent process does not affect the Child processes, but a change in the Main Thread affects other threads.
Process takes more time for creation unlike Thread.
Thread creation and termination takes much less time than Process.
@erfuuan_dev
Process is isolated but Threads share resources(data, code, files,memory).
Processes work in complete isolation from each other, that is, they use different resources, but Threads share the same resources .
If one process is blocked, then no other process can execute.
If 1 Process is blocked, the others will not work until it is unblocked, but
if 1 Thread is blocked, the other one can do its work.
Changes to the parent process does not affect child processes.
A change in the Parent process does not affect the Child processes, but a change in the Main Thread affects other threads.
Process takes more time for creation unlike Thread.
Thread creation and termination takes much less time than Process.
@erfuuan_dev
✍1
Forwarded from DevTwitter | توییت برنامه نویسی
یک برنامهنویس با تجربه به این 17 مورد توجه مینماید:
0- عاشق کدی که نوشتی نشو، همیشه باید سعی کنی بهترش کنی
1- در شرایط اورژانسی میفهمی پیچیدگی الکی درست کردن چطوری پاره میکند
2- هر روش و تکنولوژی بالاخره مزایا و معایب خودش را دارد و قطعاً هر چیزی Trade-off های خودش را دارد - حواست باشد، بهترینی وجود ندارد
3- هر خط کدی که مینویسی برای کسی یا جایی یک سرمایه است - شاید هم برای خودت
4- همه میگن کدهای بقیه کثافت است
5- بیخودی Dependency ایجاد نکنید
6- درست کد بنویسید، دعوا و درگیری و متوجه نشدن کم میشود
7- حالا یکم Comment بنویسید، جای دوری نمیرود، ولی کد خودش باید کامنت خودش باشد
8- سر یاد گرفتن چیزهای جدید مقاومت نکنید، لازم است
9- از Code Review نترسید، سبب انتشار و Share شدن دانش میگردد
10- همیشه maintainability را در نظر داشته باشید - شما در حال سیمانریزی و ایجاد یک چیزی که هرگز دست نخورد نیستید
11- جایی لازم بود، کمک بگیرید
12 - اصل مشکل را در کد حل کنید نه فقط یک جنبه از خطا را
13- هیچ پروژه و برنامهای خلاص نخواهد شد، همیشه هست
14- زمانبندی دادن با قول دادن و قسم خوردن یکی نیست، فقط یک احتمال است
15- طراحی و مهندسی سیستم را همان ابتدا مستند سازی کنید
16- پروژه را بدهید بیرون سریع، بعد آرام آرام با یک برنامه مشخص کاملش کنید
@DevTwitter | <Ali Kolahdoozan/>
0- عاشق کدی که نوشتی نشو، همیشه باید سعی کنی بهترش کنی
1- در شرایط اورژانسی میفهمی پیچیدگی الکی درست کردن چطوری پاره میکند
2- هر روش و تکنولوژی بالاخره مزایا و معایب خودش را دارد و قطعاً هر چیزی Trade-off های خودش را دارد - حواست باشد، بهترینی وجود ندارد
3- هر خط کدی که مینویسی برای کسی یا جایی یک سرمایه است - شاید هم برای خودت
4- همه میگن کدهای بقیه کثافت است
5- بیخودی Dependency ایجاد نکنید
6- درست کد بنویسید، دعوا و درگیری و متوجه نشدن کم میشود
7- حالا یکم Comment بنویسید، جای دوری نمیرود، ولی کد خودش باید کامنت خودش باشد
8- سر یاد گرفتن چیزهای جدید مقاومت نکنید، لازم است
9- از Code Review نترسید، سبب انتشار و Share شدن دانش میگردد
10- همیشه maintainability را در نظر داشته باشید - شما در حال سیمانریزی و ایجاد یک چیزی که هرگز دست نخورد نیستید
11- جایی لازم بود، کمک بگیرید
12 - اصل مشکل را در کد حل کنید نه فقط یک جنبه از خطا را
13- هیچ پروژه و برنامهای خلاص نخواهد شد، همیشه هست
14- زمانبندی دادن با قول دادن و قسم خوردن یکی نیست، فقط یک احتمال است
15- طراحی و مهندسی سیستم را همان ابتدا مستند سازی کنید
16- پروژه را بدهید بیرون سریع، بعد آرام آرام با یک برنامه مشخص کاملش کنید
@DevTwitter | <Ali Kolahdoozan/>
Code & Life
Photo
توی دل Event Loop چه خبره؟
ایونت لوپ یه مکانیزم هوشمندانه در Node.js هست که کارهای غیرهمزمان رو مدیریت میکنه. وقتی کدهای مختلف رو مینویسیم و منتظر نتیجه اونها میمونیم، Event Loop بهطور خودکار این کارها رو پشتصحنه مدیریت میکنه و ما رو از نگرانیهای پیچیده دور نگه میداره. ولی این روند خیلی پیچیدهتر از چیزیه که به نظر میاد. توی این توضیحات، من سعی میکنم ساده و خودمونی براتون توضیح بدم که چطور این اتفاقها میافتن.
خلاصهای از عملکرد Event Loop
ایونت لوپ از چندین فاز یا مرحله مختلف تشکیل شده که هرکدوم مسئول انجام یه سری کار خاص هستن. وقتی Event Loop وارد هر فاز میشه، یه صف FIFO (اول وارد، اول خارج) رو اجرا میکنه. یعنی کالبکها رو یکییکی از صف میگیره و اجرا میکنه. وقتی فاز تموم شد، میره به فاز بعدی.
به زبان ساده، هر مرحله مثل یک ایستگاه توی یک قطار هست. هر ایستگاه کار خودش رو انجام میده و وقتی تموم شد، قطار به ایستگاه بعدی میره. این چرخه ادامه پیدا میکنه تا تمام کارها انجام بشه.
مراحل مختلف Event Loop:
۱. Timers (تایمرها)
اولین مرحله، مرحلهی تایمر هاست. توی این قسمت، توابعی که با setTimeout() یا setInterval() تنظیم کردیم، اجرا میشن. یعنی وقتی زمان مشخصی که براشون تعیین کردیم تموم بشه، این توابع شروع به کار میکنن. البته، زمان دقیق اجرای این توابع ممکنه تحت تأثیر کدهای دیگه هم قرار بگیره. پس در واقع، Event Loop نمیتونه تضمین کنه که دقیقاً در زمان تعیینشده اجرا بشن.
مثال: فرض کن یه تایمر ۵ ثانیهای گذاشتی که بعد از ۵ ثانیه یه پیام رو چاپ کنه. وقتی تایم تموم میشه، این تابع وارد صف تایمرها میشه و بعد اجرا میشه.
۲. Pending Callbacks (کالبکهای معلق)
حالا، مرحلهی بعدی برای اونهایی هست که توابعی رو اجرا کردن که به نوعی با ورودی یا خروجی (I/O) سروکار دارن و منتظر کالبک هستن. مثلاً اگر یک درخواست HTTP به یه سرور دادهایم و منتظر جواب هستیم، وقتی سرور جواب داد، اینجا کالبک اجرا میشه.
مثال: فرض کن یک فایل رو از دیسک میخونی. وقتی خونده شد، کالبک باید اجرا بشه و به تو بگه که فایل آماده است. این مرحله مسئولیت اون رو به عهده داره.
۳. Idle, Prepare (آمادهسازی)
این مرحله بیشتر به کارهای داخلی Node.js مربوط میشه و معمولاً در برنامههای معمولی خیلی بهش نمیپردازیم. اما به طور کلی، Node.js این مرحله رو برای آمادهسازی خودش انجام میده تا وارد مراحل بعدی بشه.
۴. Poll (پُل)
مرحلهی پُل، قلب تپندهی Event Loop هست. اینجا، Node.js منتظره که ببینه آیا اتفاقی میافته یا نه. یعنی در اینجا منتظره تا رویدادی بیفته، مثل دریافت یک درخواست جدید، اتصال جدید، یا هر چیز دیگهای که به صورت غیرهمزمان نیاز به پردازش داشته باشه.
اگر رویدادی نباشه، ممکنه یه مدت وایسه یا حتی به فازهای بعدی بره. این مرحله بهطور کلی مسئول نظارت بر وقوع رویدادهای جدید هست.
مثال: فرض کن یک کاربر یه درخواست ارسال کرده و حالا Node.js منتظره که جواب از دیتابیس بیاد. تا وقتی که جواب نیاد، هیچکاری نمیکنه و منتظر میمونه.
۵. Check (چک)
بعد از مرحلهی پُل، نوبت به توابعی میرسه که با setImmediate() تنظیم شدهاند. این توابع بعد از مرحلهی پُل و قبل از مرحلهی Close Callbacks اجرا میشن.
این مرحله به نوعی نظارت میکنه که اگه هنوز چیزی منتظره نباشه، توابعی که باید فوراً بعد از پُل اجرا بشن، اجرا بشن.
۶. Close Callbacks (کالبکهای بستهشدن)
مرحلهی آخر، مرحلهی کالبکهای بستهشدن هست. اینجا، توابعی که نیاز به اجرا شدن بعد از بسته شدن چیزی دارن، اجرا میشن. مثلاً وقتی یک سوکت بسته میشه و باید کالبک اجرا بشه، اینجا انجام میشه.
مثال: فرض کن یک اتصال شبکه بسته میشه و باید یه فعالیت خاصی مثل بستن فایلها یا آزادسازی منابع انجام بشه. این مرحله هم همون کار رو میکنه.
نتیجهگیری :
حالا که این مراحل رو با هم مرور کردیم، متوجه شدیم که چطور Node.js از این فازها برای مدیریت کارهای غیر همزمان استفاده میکنه. این فرآیند پیچیده، ولی در عین حال خیلی کارآمد هست و باعث میشه که Node.js بتونه به طور همزمان تعداد زیادی از کارها رو انجام بده بدون اینکه نیاز به چندین نخ (thread) داشته باشه.
اینکه بدونید Event Loop چطور کار میکنه، بهتون کمک میکنه که درک بهتری از نحوه عملکرد Node.js داشته باشید و بتونید برنامههاتون رو بهینهتر بنویسید.
@erfuuan_dev
ایونت لوپ یه مکانیزم هوشمندانه در Node.js هست که کارهای غیرهمزمان رو مدیریت میکنه. وقتی کدهای مختلف رو مینویسیم و منتظر نتیجه اونها میمونیم، Event Loop بهطور خودکار این کارها رو پشتصحنه مدیریت میکنه و ما رو از نگرانیهای پیچیده دور نگه میداره. ولی این روند خیلی پیچیدهتر از چیزیه که به نظر میاد. توی این توضیحات، من سعی میکنم ساده و خودمونی براتون توضیح بدم که چطور این اتفاقها میافتن.
خلاصهای از عملکرد Event Loop
ایونت لوپ از چندین فاز یا مرحله مختلف تشکیل شده که هرکدوم مسئول انجام یه سری کار خاص هستن. وقتی Event Loop وارد هر فاز میشه، یه صف FIFO (اول وارد، اول خارج) رو اجرا میکنه. یعنی کالبکها رو یکییکی از صف میگیره و اجرا میکنه. وقتی فاز تموم شد، میره به فاز بعدی.
به زبان ساده، هر مرحله مثل یک ایستگاه توی یک قطار هست. هر ایستگاه کار خودش رو انجام میده و وقتی تموم شد، قطار به ایستگاه بعدی میره. این چرخه ادامه پیدا میکنه تا تمام کارها انجام بشه.
مراحل مختلف Event Loop:
۱. Timers (تایمرها)
اولین مرحله، مرحلهی تایمر هاست. توی این قسمت، توابعی که با setTimeout() یا setInterval() تنظیم کردیم، اجرا میشن. یعنی وقتی زمان مشخصی که براشون تعیین کردیم تموم بشه، این توابع شروع به کار میکنن. البته، زمان دقیق اجرای این توابع ممکنه تحت تأثیر کدهای دیگه هم قرار بگیره. پس در واقع، Event Loop نمیتونه تضمین کنه که دقیقاً در زمان تعیینشده اجرا بشن.
مثال: فرض کن یه تایمر ۵ ثانیهای گذاشتی که بعد از ۵ ثانیه یه پیام رو چاپ کنه. وقتی تایم تموم میشه، این تابع وارد صف تایمرها میشه و بعد اجرا میشه.
۲. Pending Callbacks (کالبکهای معلق)
حالا، مرحلهی بعدی برای اونهایی هست که توابعی رو اجرا کردن که به نوعی با ورودی یا خروجی (I/O) سروکار دارن و منتظر کالبک هستن. مثلاً اگر یک درخواست HTTP به یه سرور دادهایم و منتظر جواب هستیم، وقتی سرور جواب داد، اینجا کالبک اجرا میشه.
مثال: فرض کن یک فایل رو از دیسک میخونی. وقتی خونده شد، کالبک باید اجرا بشه و به تو بگه که فایل آماده است. این مرحله مسئولیت اون رو به عهده داره.
۳. Idle, Prepare (آمادهسازی)
این مرحله بیشتر به کارهای داخلی Node.js مربوط میشه و معمولاً در برنامههای معمولی خیلی بهش نمیپردازیم. اما به طور کلی، Node.js این مرحله رو برای آمادهسازی خودش انجام میده تا وارد مراحل بعدی بشه.
۴. Poll (پُل)
مرحلهی پُل، قلب تپندهی Event Loop هست. اینجا، Node.js منتظره که ببینه آیا اتفاقی میافته یا نه. یعنی در اینجا منتظره تا رویدادی بیفته، مثل دریافت یک درخواست جدید، اتصال جدید، یا هر چیز دیگهای که به صورت غیرهمزمان نیاز به پردازش داشته باشه.
اگر رویدادی نباشه، ممکنه یه مدت وایسه یا حتی به فازهای بعدی بره. این مرحله بهطور کلی مسئول نظارت بر وقوع رویدادهای جدید هست.
مثال: فرض کن یک کاربر یه درخواست ارسال کرده و حالا Node.js منتظره که جواب از دیتابیس بیاد. تا وقتی که جواب نیاد، هیچکاری نمیکنه و منتظر میمونه.
۵. Check (چک)
بعد از مرحلهی پُل، نوبت به توابعی میرسه که با setImmediate() تنظیم شدهاند. این توابع بعد از مرحلهی پُل و قبل از مرحلهی Close Callbacks اجرا میشن.
این مرحله به نوعی نظارت میکنه که اگه هنوز چیزی منتظره نباشه، توابعی که باید فوراً بعد از پُل اجرا بشن، اجرا بشن.
۶. Close Callbacks (کالبکهای بستهشدن)
مرحلهی آخر، مرحلهی کالبکهای بستهشدن هست. اینجا، توابعی که نیاز به اجرا شدن بعد از بسته شدن چیزی دارن، اجرا میشن. مثلاً وقتی یک سوکت بسته میشه و باید کالبک اجرا بشه، اینجا انجام میشه.
مثال: فرض کن یک اتصال شبکه بسته میشه و باید یه فعالیت خاصی مثل بستن فایلها یا آزادسازی منابع انجام بشه. این مرحله هم همون کار رو میکنه.
نتیجهگیری :
حالا که این مراحل رو با هم مرور کردیم، متوجه شدیم که چطور Node.js از این فازها برای مدیریت کارهای غیر همزمان استفاده میکنه. این فرآیند پیچیده، ولی در عین حال خیلی کارآمد هست و باعث میشه که Node.js بتونه به طور همزمان تعداد زیادی از کارها رو انجام بده بدون اینکه نیاز به چندین نخ (thread) داشته باشه.
اینکه بدونید Event Loop چطور کار میکنه، بهتون کمک میکنه که درک بهتری از نحوه عملکرد Node.js داشته باشید و بتونید برنامههاتون رو بهینهتر بنویسید.
@erfuuan_dev
🙏2
Forwarded from تهلاگ / Tehlug
ثبتنام رویداد ۲۷۷ تهلاگ آغاز شد! 🎉
رویداد ۲۷۷ در روز پنجشنبه، ۱۱ بهمن ۱۴۰۳ شامل ۶ ارائه فنی و ۲ کارگاه آموزشی برگزار میشود و فرصتی عالی برای علاقهمندان به لینوکس، جامعه نرمافزار آزاد و متنباز، پایتون و فناوریهای کلود است.
اطلاعات بیشتر و ثبتنام :
🔗 evand.com/events/tehlug277
@TehranLUG
رویداد ۲۷۷ در روز پنجشنبه، ۱۱ بهمن ۱۴۰۳ شامل ۶ ارائه فنی و ۲ کارگاه آموزشی برگزار میشود و فرصتی عالی برای علاقهمندان به لینوکس، جامعه نرمافزار آزاد و متنباز، پایتون و فناوریهای کلود است.
اطلاعات بیشتر و ثبتنام :
🔗 evand.com/events/tehlug277
@TehranLUG
❤1