تفاوت بین معماری رویداد محور Node.js و برنامه نویسی چند رشته ای در سایر زبانها چیست؟


پاسخ 1:

در هر دو الگوی رویداد محور و چند رشته ای ، کد در یک فرآیند سیستم عامل اجرا می شود.

اگر این فرآیند چندین موضوع را اجرا کند ، این موضوعات حافظه پردازش (فضای آدرس) را برای خواندن و نوشتن به اشتراک می گذارند.

جاوا اسکریپت ، که Node.js را هدایت می کند ، ذاتاً تک رشته ای است. هر عملکرد تضمین شده است که به طور کامل انجام شود و هیچ کد JavaScript دیگری در این فرآیند در طول اجرای این عملکرد اجرا نمی شود. رویدادهای طبیعی ناهمزمان (شبکه ، ورودی / خروجی دیسک ، تایمر ، سایر موارد سخت افزاری و سیستم عامل) توسط موتور پردازش می شوند که عملکردهای جاوا اسکریپت ثبت شده به عنوان کنترل کننده (یا تماس با ما) را برای این رویدادها اضافه می کند تا در صف حلقه رویداد قرار بگیرند. قبل از پایان صف

در پارادایم چند رشته ای ، دو یا چند موضوع به طور موازی کد را اجرا می کنند ، به طوری که در طول اجرای عملکردی ، ممکن است یک قطعه کد مختلف نیز در یک هسته پردازنده متفاوت اجرا شود ، احتمالاً خواندن یا نوشتن در همان آدرس های حافظه. این می تواند به یک وضعیت حافظه متناقض منجر شود ، مگر اینکه کد از مکانیزم های ویژه سیستم عامل (همگام سازی اولیه) برای مدیریت دسترسی به حافظه مشترک استفاده کند.



پاسخ 2:

این یک سوال خوب است: "تفاوت بین معماری رویداد محور Node.j و برنامه نویسی چند رشته ای در زبان های دیگر چیست؟"

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

  • معماری گره محور رویداد

معماری رویداد محور فقط برای گره ها در نظر گرفته نشده است ، به عنوان مثال B. Tornado (پایتون) ، Vertx (جاوا) ، Akka (Scala) ، ReactiveX (چند زبان).

  • برنامه نویسی چند رشته ای به زبان های دیگر.

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

بنابراین رویداد محور نه تنها برای گره ها در دسترس است ، و چند رشته ای نیز می تواند در گره ها انجام شود.

بنابراین می توان دو سؤال مطرح کرد: "چه تفاوتی بین رویداد محور و چند رشته" و "تفاوت بین گره و سایر زبانها (چارچوب) چیست". من روی دومی تمرکز خواهم کرد زیرا این به نظر می رسد قصد سؤال است.

نکته خاص در مورد Node این است که نویسنده آن را ایجاد کرده است تا هنگام ساختن برنامه های وب ، از مسدود شدن I / O جلوگیری کند. فرهنگ جامعه گره تأکید و تقویت بر قدرت عدم انسداد I / O است. شما بسیاری از کتابخانه های شخص ثالث را که جلوی تماس را می گیرند پیدا نخواهید کرد. به عنوان یک توسعه دهنده با استفاده از Node ، بعید می توانید با انسداد نامحسوس در کد خود روبرو شوید. به زبانهای دیگر ، یک توسعه دهنده ساده و بی تکلف ممکن است به طور تصادفی تماسهای مسدود کننده بسیار ناکارآمد از قبیل موارد برقرار کند ب- خواندن از اتصال بانک اطلاعاتی.

گفته می شود ، شما باید واقعاً در مورد چندین مدل "موازی سازی" بیشتر بخوانید و جوانب مثبت و منفی هر یک را درک کنید. امتیازهای مهم برای تشخیص اینکه چرا چند ساله خواندن برای مدت طولانی قابل قبول بوده است.



پاسخ 3:

تفاوت های مفهومی بسیار ساده برای پیچیدن سر شماست.

در معماری رویداد محور ، برنامه شما با یک حلقه تک رشته ای مداوم اجرا می شود (می توانید چند گره را با گره انجام دهید ، اما در حال حاضر نیازی به نگرانی در مورد آن نیست). هنگامی که یک رویداد شروع می شود ، کار در پشته فراخوانی وجود دارد که باید در زمان آزاد برنامه پردازش شود.

معماری چند رشته ای معمولاً وقتی باید منتظر یک اقدام باشد موضوع جدیدی را ایجاد می کند. بنابراین شما به یک بانک اطلاعاتی می روید و یک موضوع جدید ایجاد می کنید که تمام کارهای لازم را انجام می دهد و برای تکمیل یا پیوستن دوباره موضوع اصلی ، اقدامات لازم را انجام می دهد.

هر دو روش برای اهداف مختلف بسیار مفید هستند. رویداد محور برای رابط های کاربر و سرورها بسیار عالی است زیرا برنامه شما نمی داند چه زمانی یک رویداد جدید رخ می دهد و غالباً اتفاقاتی در spurts رخ می دهد. در حالی که نخ برای کارهایی با محاسبات فشرده که در آن می خواهید یک مشکل را به قسمتهای بسیار کوچکتر تقسیم کنید (یا به حد حلقه حلقه منفرد خود نزدیک شوید) مورد نیاز است.