اول از همه ، برای این که درک درستی از تفاوت بین برنامه نویسی Asynchronous و Multi-Threaded داشته باشیم لطفاً این مطلب زیر رو مطالعه کنید چرا که برخی از سؤالات در ذهن شما پاک خواهد شد.
تفاوت بین Asynchronous و Multi-Threading
تفاوت بین Process و Thread چیست؟
در اینجا قیاسی وجود دارد که میتواند به درک مشکل کمک کند. شما در رستورانی آشپزی میکنید. سفارش تخممرغ به همراه نان تست میآید.
روش Synchronous - تو اون تخممرغها رو درست میکنی، بعدش هم نون رو تست می کنی
روش Asynchronous, single threaded - شما شروع به پخت تخم مرغ و تنظیم تایمر می کنید. شما شروع به پخت و پز نان تست می کنید و تایمر را تنظیم میکنید در حالی که هر دو در حال پخت هستند ، شما آشپزخانه را تمیز می کنید. وقتی تایمر خاموش شد ، تخم مرغ ها را از روی حرارت و نان تست را از توستر بیرون می آورید و آنها را سرو می کنید.
روش Asynchronous, multi-threaded - شما دو آشپز دیگر را استخدام می کنید ، یکی برای پختن تخم مرغ و دیگری برای تهیه نان تست. حالا شما مشکل هماهنگ کردن آشپزها را دارید تا آن ها هنگام تقسیم منابع ، در آشپزخانه با یکدیگر نزاع نداشته باشند.
برای روشن تر شدن مسئله من همین مسئله را با یک مورد کاربردی نشان داده ام که در آن 2 کاربر ایجاد خواهم کرد و آنها چندین thread را اجرا می کنند و همزمان لیست عمومی را روی کنسول می خوانند و چاپ می کنند.
برای این که بتونیم این تست ساده رو داشته باشیم نیاز هست که شما کمی با برنامه نویسی به زبان سی شارپ آشنا باشید ما این مراحل ساده را دنبال می کنیم:
مرحله اول
کار رو با ایجاد لیستی که توسط چندین کاربر به اشتراک گذاشته خواهد شد شروع خواهیم کرد. سپس متد CreateUsers را فراخوانی خواهیم کرد.
مرحله دوم
ما میتوانیم thread های مختلفی برای پاس دادن به متد بعدی ایجاد کنیم.
مرحله سوم
در اینجا ما یک thread جداگانه برای هر کاربر ایجاد میکنیم و دادههای کاربر را به متد Print پاس میدهیم.
مرحله چهارم
متد Print به روش async فراخوانی می شود و قبل از چاپ پیام در کنسول صبر خواهد کرد. توجه داشته باشید که این روش همزمان روی thread های جداگانه اجرا خواهد شد.
مرحله پنجم
اکنون ما متد Print_Success را به صورت async ایجاد خواهیم کرد که وظیفه چاپ داده ها را از این لیست انجام می دهد و در اینجا برای نشان دادن تاخیرهای متفاوت در زمان واقعی، ما thread را برای مدتزمان مختلف به sleep خواهیم برد.
منبع : c-sharpcorner.com