انجام در مقابل برنامه ریزی
انجام در مقابل برنامه ریزی
خوب، بنابراین مغز ما را میتوان مانند روشهایی در صف حلقه رویداد تک رشتهای در نظر گرفت، مانند موتور JS. به نظر می رسد مسابقه خوبی است.
اما ما باید در تحلیل خود دقیق تر از آن باشیم. یک تفاوت بزرگ و قابل مشاهده بین نحوه برنامه ریزی وظایف مختلف و نحوه اجرای مغز ما در واقع این وظایف وجود دارد.
باز هم به نوشتن این متن به عنوان استعاره من برمی گردم. طرح کلی ذهنی من در اینجا این است که به نوشتن و نوشتن ادامه دهم، و به طور متوالی مجموعه ای از نکاتی را که در افکارم ترتیب داده ام مرور کنم. قصد ندارم در این نوشته وقفه یا فعالیت غیرخطی داشته باشم. اما با این وجود، مغز من همیشه در حال تغییر است.
حتی اگر در سطح عملیاتی مغز ما رویدادهای ناهمگام است، به نظر می رسد ما وظایف را به روشی متوالی و همزمان برنامه ریزی می کنیم. “من باید به فروشگاه بروم، سپس مقداری شیر بخرم، سپس خشکشویی را رها کنم.”
متوجه خواهید شد که این تفکر سطح بالاتر (برنامه ریزی) در فرمول بندی آن چندان ناهمگام به نظر نمی رسد. در واقع، به ندرت پیش می آید که ما عمداً صرفاً بر اساس رویدادها فکر کنیم. در عوض، ما چیزها را با دقت و به طور متوالی برنامه ریزی می کنیم (A سپس B و سپس C)، و تا حدی نوعی انسداد زمانی را فرض می کنیم که B را مجبور می کند روی A منتظر بماند و C را مجبور می کند روی B منتظر بماند.
زمانی که یک توسعهدهنده کد مینویسد، مجموعهای از اقدامات را برای انجام برنامهریزی میکند. اگر آنها در توسعهدهنده بودن مهارت دارند، با دقت در حال برنامهریزی آن هستند. “من باید z را به مقدار x و سپس x را به مقدار y تنظیم کنم” و غیره.
وقتی کدهای همزمان را، بیانیه به بیانیه می نویسیم، بسیار شبیه به لیست وظایف ما عمل می کند:
// swap `x` and `y` (via temp variable `z`)
z = x;
x = y;
y = z;
این سه عبارت تخصیص همزمان هستند
بنابراین x = y منتظر می ماند تا z = x تمام شود، و y = z به نوبه خود منتظر x = y می ماند تا پایان یابد. راه دیگر بیان آن این است که این سه دستور موقتاً به ترتیبی خاص و یکی پس از دیگری اجرا می شوند. خوشبختانه، نیازی نیست که در اینجا با جزئیات رویدادهای ناهمگام اذیت شویم. اگر این کار را انجام دهیم، کد بسیار پیچیده تر می شود، به سرعت!
بنابراین، اگر برنامه ریزی مغز همزمان به خوبی با عبارات کد همزمان مطابقت داشته باشد، مغز ما چقدر در برنامه ریزی کد ناهمزمان عمل می کند؟
به نظر می رسد که نحوه بیان ناهمزمانی (با فراخوانی) در کد خود به هیچ وجه به خوبی با آن رفتار برنامه ریزی همزمان مغز مطابقت ندارد.
آیا واقعاً می توانید تصور کنید که یک خط فکری داشته باشید که وظایف شما را مانند این برنامه ریزی کند؟
“من باید به فروشگاه بروم، اما در راه مطمئن هستم که با من تماس تلفنی خواهد گرفت، “سلام، مامان”، و در حالی که او شروع به صحبت می کند، آدرس فروشگاه را در GPS جستجو می کنم. اما بارگذاری آن یک ثانیه طول می کشد، بنابراین رادیو را خاموش می کنم تا بتوانم صدای مامان را بهتر بشنوم، سپس متوجه می شوم که فراموش کرده ام کاپشن بپوشم و بیرون سرد است، اما مهم نیست، به رانندگی و صحبت کردن ادامه دهید. به مامان، و سپس صدای کمربند ایمنی به من یادآوری میکند که باید قفل کنم، بنابراین “بله، مامان، من کمربند ایمنی خود را میبندم، همیشه این کار را میکنم!”. آه، بالاخره جیپیاس مسیرها را دریافت کرد، حالا…”
قوانین ارسال دیدگاه در سایت