پردازش موازی یا خطی در جاوا اسکریپت ، مسئله این است! (قسمت اول)

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

این گونه مجموعه عملیات ها را یک برنامه یا Program می نامیم.

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

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

البته باید گفت که اجرای همزمان چندین برنامه در یک لحظه در مدل واقعی همزمان نیست ، بلکه با سوئیچ های متوالی این توهم را برای کاربر ایجاد می کند که برنامه های در حال اجرا همزمان می باشند.

سوئیچ یا جابجا کردن (Context Switch) در سطح سیستم عامل به فرایندی گفته می شود که در آن از یک صف استفاده می شود و با جابجا کردن برنامه ها یا نخ ها (Threads) به سرعت و به صورت متوالی ، همزمانی پردازش را شبیه سازی می کنند.

این جابجایی در برنامه ها، تنها مشکل اجرای همزمان را برطرف می نماید. اما مشکل دیگر نیز وجود دارد.

درصورتی که یک برنامه نیاز داشته باشد تا چندین قسمت از آن به صورت مجزا پردازش شود تا تداخلی در روند اجرای یک دیگر نداشته باشند چطور؟

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

دو نمونه از آن ها معرفی می کنیم..

اولین مورد نخ ها هستند . نخ ها در سطح سخت افزار یا در سطح نرم افزار قابل پیاده سازی هستند.

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

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

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

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

دومین مورد استفاده از روش non-blocking I/O یا async I/O می باشد.

کامپیوتر ها دارای دو حالت فعالیت می باشند. اول حالت عادی اجرای دستورات برنامه ها می باشد و حالت دوم اجرای دستورات I/O می باشد. درباره حالت دوم می توان گفت که دستوراتی مانند دسترسی به حافظه ، دسترسی به دستگاه های خارجی و … دستورات I/O هستند.

I/O به معنی ورودی/خروجی می باشد.

در حالت Blocking I/O هنگامی که سیستم به یک دستور I/O می رسد ، نخ متوقف می شود تا زمانی که وقفه (دستور اتمام فرایند) صادر شود و سپس نخ به ادامه فرایندش ادامه می دهد.

اما در حالت non-blocking I/O توقفی در نخ رخ نمی دهد. در این مورد پاسخ زیاد اهمیتی ندارد و تنها انجام عملیات مهم است.

در قسمت بعد درباره نحوه کارکرد جاوا اسکریپت توضیح خواهم داد…



دسته بندی: مقاله

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *