Multithreading در جاوا قسمت 1 – Process vs Thread

مقدمه
Multithreading یک مفهوم برنامه نویسی مهم است که اجازه می دهد چندین کار به طور همزمان در یک فرآیند واحد اجرا شوند. این می تواند به طور قابل توجهی عملکرد برنامه ها را بهبود بخشد، به ویژه برنامه هایی که به قدرت پردازش زیادی نیاز دارند یا نیاز به انجام چندین کار به طور همزمان دارند. در حالی که طراحی برنامه های کاربردی چند رشته ای می تواند پیچیده باشد، درک این مفهوم برای هر توسعه دهنده نرم افزار ارزشمند است.
مجموعه مقالات من برای توضیح موارد ضروری در مورد Multithreading در جاوا به روشی ساده است.
در این مقاله، تفاوتهای بین Processes و Threads را بررسی خواهیم کرد. چرا این مهم است؟ خوب، همزمانی را میتوان به روشهای متعددی از جمله پردازش چند رشتهای و چند رشتهای به دست آورد، و هر کدام بهطور متفاوتی برای اهداف متفاوتی استفاده میشوند. بنابراین، درک تفاوت ها بسیار مهم است. از آنجایی که ما بر روی چند رشته ای تمرکز خواهیم کرد، و این دو موضوع شباهت هایی دارند و به راحتی می توان آنها را با هم اشتباه گرفت، برخی از تفاوت های کلیدی را برجسته می کنم. و شاید بخواهید بدانید که چگونه همه اینها برای یک کامپیوتر به نظر می رسند. بیایید در آن شیرجه بزنیم.
تفسیر کامپیوتر از فرآیندها و رشته ها
یک فرآیند یک برنامه کوچک در یک برنامه است، در حالی که یک رشته یک برنامه کوچک در یک فرآیند است. CPU (واحد پردازش مرکزی) شما مسئول اجرای آنها است. یک CPU منفرد می تواند چندین رشته را اجرا کند اما فقط یک پردازش را در یک زمان. در همین حال، یک CPU دارای چندین هسته است که هر یک از آنها وظیفه اجرای یک رشته واحد را بر عهده دارند.
به عنوان مثال، من 8 CPU دارم و هر کدام از آنها شامل 4 هسته است، بنابراین رایانه من می تواند 8 پردازش و 32 رشته را به طور همزمان اجرا کند. برای بررسی تعداد افرادی که دارید، Task Manager، تب Performance را باز کنید.
فرآیندها
یک مثال از یک فرآیند می تواند یک برنامه وب منفرد باشد که توسط مرورگر اپرا اجرا می شود. از آنجایی که تعداد زیادی برنامه وب روی تب های مختلف باز می شوند که به طور همزمان اجرا می شوند، برای مرورگر مناسب است که آنها را به فرآیندهای مختلف تقسیم کند.
با وجود اینکه من 17 برگه در مرورگر وب خود باز کرده ام، تعداد پردازش ها 35 است. چگونه سیستم من بیش از حد بارگذاری نمی شود؟ پاسخ در چندوظیفگی است. هر CPU می تواند به سرعت بین فرآیندهای در حال اجرا جابجا شود. هنگامی که برخی از کارها انجام می شود، به یکی دیگر تغییر می کند و این کار آنقدر سریع انجام می شود که می تواند تمام برنامه ها و فرآیندها را اجرا کند. به همین دلیل به نظر می رسد که CPU ها چندین فرآیند را همزمان اجرا می کنند، اما در واقع این کار را نمی کنند.
موضوعات
یک بازی نمونه خوبی از برنامه های چند رشته ای است. کارهای زیادی وجود دارد که باید به طور همزمان در بازی ها انجام شود: صدا، رفتار شخصیت های مختلف، آب و هوا، رابط کاربری و غیره.
چه زمانی از نخ ها و چه زمانی – پردازش ها استفاده شود
Thread ها معمولاً زمانی استفاده می شوند که کار شامل مقدار زیادی I/O یا همگام سازی با رشته ها یا فرآیندهای دیگر باشد. به عنوان مثال، یک وب سرور که نیاز به رسیدگی به چندین درخواست به طور همزمان دارد، می تواند از یک Thread Pool برای پردازش هر درخواست در یک رشته جداگانه استفاده کند. این به سرور اجازه می دهد تا چندین درخواست را به طور همزمان مدیریت کند و در حین انتظار برای تکمیل عملیات ورودی/خروجی، از مسدود شدن جلوگیری کند.
از سوی دیگر، فرآیندها معمولاً زمانی استفاده میشوند که وظیفه شامل پردازشهای محدود به CPU باشد یا زمانی که چندین CPU یا هسته برای اجرای موازی کار وجود دارد. به عنوان مثال، یک برنامه رمزگذاری ویدیویی که نیاز به رمزگذاری چندین ویدیو به طور همزمان دارد، می تواند از چندین فرآیند برای رمزگذاری هر ویدیو در یک فرآیند جداگانه استفاده کند. این به برنامه اجازه می دهد تا از CPU ها یا هسته های موجود استفاده کند و چندین ویدیو را به طور همزمان رمزگذاری کند.
به حساب آوردن
برای جابجایی بین دو فرآیند، CPU باید فرآیند فعلی را خاتمه دهد، آن را ذخیره کند، زیرا تمام نشده است، و سپس یکی دیگر را شروع کند. از طرف دیگر رشته ها به چنین عملیاتی نیاز ندارند، زیرا آنها حافظه را در یک فرآیند با یکدیگر به اشتراک می گذارند. بنابراین به دلایل متعددی، رزوه ها به عنوان عملیات سبک تر از فرآیندها در نظر گرفته می شوند.
بعدش چی؟
آیا از این مقاله لذت بردید؟ امیدوارم اکنون بتوانید به این سوال پاسخ دهید که “تفاوت بین موضوعات و فرآیندها چیست؟” در مقاله بعدی روش های مختلف ایجاد یک موضوع در جاوا را پوشش خواهم داد. آیا هیچ سوالی دارید؟ در نظرات بپرسید و لایک مقاله را فراموش نکنید.