مفهوم thread و برنامه نویسی نا همزمان در اندروید

به نام خدا

سلام دوستان امیدوارم حالتون خوب باشه...

فکر میکنم همین تصویر بالا رو یه نگاه بندازید دیگه نیازی به توضیح عملکرد thread ها در اندروید نباشه ولی بازم یه توضیح میدم. ببینید ما یه thread اصلی داریم که هر برنامه ای که اجرا میکنیم میاد داخل این بخش و شروع به کار میکنه. شما میدونید که برنامه های جاوا و کاتلین پس از کامپایل شدن و تبدیل شدن به بایت کد، توسط گوشی کاربر تفسیر میشن. تفسیر شدن به معنای اجرای خط به خط کد ها هستش. حالا یه سوال پیش میاد. کاربر روی یک دکمه در برنامه شما کلیک میکنه که اون دکمه مسئول دانلود یه فیلم هست. حالا اگر شما کاربر رو مجبور کنید که تا پایان دانلود فیلم هیچ کاری نکنه که به شدت تجربه کاربری اپ خودتونو پایین میارید. اینجاست که از thread های دیگه استفاده میکنید. یعنی اجرای این عملیات رو به یک بخش دیگه از سی پی یو واگذار میکنید تا در عین دانلود فیلم، کاربر بتونه داخل اپ به تعامل بپردازه...



خوب شاید با خودتون بگین هر کاری که قراره انجام بدیم رو بفرستیم به thread دیگه ای تا سرعت اپ بالا بره اما باید بدونید که اولا مدیریت کردن thread ها کار آنچنان ساده ای نیست و همین الان هم از کتابخونه هایی نظیر رتروفیت و آر ایکس برای انجام کار های مختلف در thread های مختلف استفاده میکنیم و ثانیا برخی از کار ها رو شما باید در thread اصلی انجام بدین. چه کاری ؟ هر کد اندرویدی رو شما باید داخل thread اصلی استفاده کنید در غیر این صورت برنامه کرش میکنه. مثلا اگر شما در thread بکگراند یه رشته ای رو از اینترنت گرفتید، حالا اگر بخواین اون رشته رو Toast کنید ، با توجه به اینکه Toast یک کد اندرویدی محسوب میشه ، باید به thread اصلی برگردید وگرنه برنامه کرش میکنه.

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





و اما برنامه نویسی نا همزمان چیه؟

دقیقا همین چیزایی که تا الان گفتم. یعنی به مفهوم اینکه ما یه قطعه کد سنگین رو برای اجرا شدن به thread دیگری بفرستیم تا از قفل کردن ui جلوگیری کنیم. یعنی در عین حالی که برنامه داره فیلم دانلود میکنه، کاربر بتونه با برنامه تعامل داشته باشه و حس نکنه که برنامه هنگ کرده. اما سوال بسیار حیاتی پیش میاد. اینکه برنامه ما در آن واحد هم دانلود میکرده باشه و هم قابل تعامل باشه که مفهوم همزمان بودن رو میرسونه، یعنی چند تا کار دارن همزمان انجام میشن؛ پس چرا میگن برنامه نویسی نا همزمان؟

دلیلش اینه که اونایی که این اسم رو گذاشتن از یه جنبه دیگه به قضیه نگاه کردن. چه جنبه ای؟ ببینید وقتی شما برای اون قطعه کد سنگینی که دارید ( همون دانلود فیلم ) ، از یک thread دیگه استفاده نکنید، باعث میشه که thread اصلی قفل کنه و منتظر پاسخ اون قطعه کد بمونه که بهش میگن برنامه نویسی همزمان؛ یعنی در همین زمان باید پاسخ اون قطعه کد داده بشه تا برنامه بره سراغ سایر بخش ها. اما زمانی که شما برای اجرای اون قطعه کد از thread دیگه ای استفاده میکنید ، یعنی پاسخ رو به زمان دیگه ای موکول کردید؛ بدین معنی که به سیستم گفتید این کد رو یه جای دیگه اجرا کن و هر وقت جوابش اومد خبرمون کن. پس بدین دلیل به این روش میگن برنامه نویسی نا همزمان.

امیدوارم منظورمو رسونده باشم.

به امید روزای بهتر...