چرا Node.js با single-thread بودنش بازم سریعه !
آیا چندین مقاله خوانده اید تا بفهمید که Node.js تک رشته ای است یا چند رشته ای؟ چرا بسیاری از آنها می گویند تک رشته و دیگران می گویند چند رشته؟ بعد از خواندن چندین مقاله به نظر میرسد همیشه این تردید در پشت ذهن شما وجود دارد که به شما بگوید مفهوم هنوز مشخص نیست. در این مقاله امیدوارم بتوانم این سردرگمی را روشن کنم.
اول، چرا یک برنامه در حالت چند رشته ای سریعتر است؟
تا حدی به این دلیل است که یک برنامه چند رشته ای می تواند روی چندین هسته اجرا شود. با این حال، دلیل اصلی، تا حد زیادی، این است که وقتی یک رشته در انتظار برخی از عملیات IO است (که اغلب، به خصوص در یک سرور است)، رشتههای دیگر همچنان میتوانند پیشرفت کنند.
حال، در مورد Node چطور؟
در مورد Node باید بگویم که Node تک رشته ای نیست. اسکریپت کاربر در JS در یک رشته اجرا می شود، اما تمام عملیات IO به طور بومی توسط libuv و سیستم عامل، که چند رشته ای هستند، مدیریت می شوند.
توضیحات بیشتر اینجا
در عمل، این بدان معنی است که چندین درخواست به صورت موازی انجام می شود. در اینجا یک مثال بسیار (بسیار) ساده از توالی احتمالی اقدامات وجود دارد:
کل معماری Node (و io.js) داشتن سطح بالایی از موازی بودن را ساده می کند. حلقه رویداد فقط رشته کاربر را برای کارهای بسیار کوتاه فراخوانی میکند که در عملیات بعدی IO متوقف میشود (خوب، نه تنها IO، بلکه اغلب) زمانی که کد شما به گره یک callback میدهد که پس از پایان عملیات فراخوانی میشود.
البته این فقط زمانی کار می کند که از توابع ناهمزمان Node استفاده می کنید. هر زمان که از تابعی استفاده می کنید که به "Sync" ختم می شود مانند writeFileSync، همزمانی شکسته میشود.
user script | node + OS "threads" (libuv)
-------------------------------------------------------------
receive and analyze request 1 |
ask node for file 1 | fetching file 1
receive and analyze request 2 | fetching file 1
ask node for file 2 | fetching file 1, fetching file 2
prepare response header 1 | fetching file 2
tell node to send file 1 | send file 1, fetching file 2
prepare response header 2 | send file 1
tell node to send file 2 | send file 1, send file 2
مطلبی دیگر از این انتشارات
قابلیت جدید گوگل، خبرهای خوب در راه است
مطلبی دیگر از این انتشارات
تابلوی جهل مقدس!
مطلبی دیگر از این انتشارات
مسیر یادگیری هوش مصنوعی از صفر