Threading در سوئیفت — به زبان ساده

۶۶ بازدید
آخرین به‌روزرسانی: ۰۱ مهر ۱۴۰۲
زمان مطالعه: ۳ دقیقه
Threading در سوئیفت — به زبان ساده

در صورتی که با سابقه برنامه‌نویسی در پلتفرم‌های دیگر به سمت سوئیفت آمده باشید، یا در صورتی که هنوز تجربه کمی در این زبان داشته باشید، احتمالاً در زمینه درک Threading در iOS با مشکل مواجه می‌شوید. در این مقاله نکاتی در مورد Threading در سوئیفت با بهره‌گیری از GCD معرفی می‌کنیم.

توجه داشته باشید که Threading به طور کامل در مورد شیوه مدیریت اولویت‌بندی کارها در اپلیکیشن است. سریع‌تر ساختن اجرای کد بسیار عالی است، اما آن چه مهم‌تر است میزان سرعتی است که کاربر هنگام کار با اپلیکیشن حس می‌کند. هدف ما به عنوان توسعه‌دهنده این است که هر چیزی که کاربر می‌بیند و با آن تعامل دارد را در بالاترین اولویت قرار دهیم. بدین ترتیب اپلیکیشن در نظر کاربر سریع‌تر و روان‌تر به نظر می‌رسد. از کاربر نخواهید که منتظر بارگذاری چیزی بماند که به آن اهمیت نمی‌دهد یا متوجه آن نیست.

تنها از Thread اصلی برای به‌روزرسانی نماها استفاده کنید

این ساده‌ترین روش برای جلوگیری از بروز مشکل است. ایده اصلی آن است که مطمئن شویم همه نماها و عناصر اینترفیس از سوی آیتم‌های دیگر در صف اصلی مسدود نمی‌شوند. به مثال زیر توجه کنید:

Threading در سوئیفت

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

با انواع کیفیت‌های سرویس GCD آشنا شوید

اولویت‌بندی‌های مختلفی برای اجرای کار در iOS وجود دارند. کیفیت‌های بالاتر ابتدا اولویت‌بندی می‌شوند و مستقیماً مدیریت خواهند شد؛ در حالی که سرویس‌های با کیفیت پایین‌تر زمانی مدیریت می‌شوند که برخی منابع سیستم آزاد شود.

کیفیت‌های مختلف وقتی از بالا به پایین رتبه‌بندی شوند به صورت زیر هستند:

کلاس QoSنوع کار و تمرکز QoSمدت کاری که باید اجرا شود
کارهای نیازمند تعامل با کاربراین دسته کارهایی که با کاربر تعامل دارند مانند عملیاتی روی نخ اصلی، رفرش کردن اینترفیس کاربر و یا اجرای انیمیشن را شامل می‌شود. اگر کار به سرعت اجرا نشود، اینترفیس کاربری ممکن است قفل شود. تمرکز این دسته روی پاسخگویی و عملکرد است.کار عملاً آنی صورت می‌گیرد.
کارهای آغاز شده از سوی کاربرکارهایی که کاربر آغاز می‌کند و نیازمند نتایج سریع است مانند باز کردن یک سند ذخیره شده یا اجرای یک عمل پس از کلیک کاربر روی اینترفیس در این دسته جای می‌گیرند. این کارها برای تداوم تعامل کاربر ضروری هستند. تمرکز این دسته روی پاسخگویی و عملکرد است.کارها تقریباً به صورت آنی انجام می‌یابند، مثلاً چند ثانیه یا کمتر طول می‌کشد.
کاربردیکارهایی که مدت زمانی طول می‌کشند تا تکمیل شوند و نتیجه آنی نیاز ندارند مانند دانلود کردن یا ایمپورت داده‌ها را شامل می‌شود. وظایف کاربردی به طور معمول یک نوار پیشروی دارند که در معرض دید کاربر است. در این دسته تمرکز روی ارائه موازنه‌ای بین پاسخگویی، عملکرد و کارایی انرژی است.کارها از چند ثانیه تا چند دقیقه طول می‌کشند.
پس‌زمینهکارهایی مانند اندیس کردن، همگام‌سازی و پشتیبان‌گیری، در دسته پس‌زمینه جای می‌گیرند و در معرض دید کاربر نیستند. در این دسته تمرکز روی کارایی انرژی است.کارها زمان زیادی طول می‌کشند، مثلاً ممکن است چند دقیقه یا ساعت به طول بینجامند.

ساخت یک صف از روی کیفیت سرویس کار واقعاً آسانی است. کافی است یک نام و یک QoS برای آن تعیین کنید:

Threading در سوئیفت

بدانید هر لحظه روی کدام Thread هستید

برای یافتن این که در حال حاضر روی کدام Thread قرار داریم، در هر بخش از کد می‌توان از Thread.current استفاده کرد:

Threading در سوئیفت

بدین ترتیب می‌توانید دقیقاً اولویت‌بندی تابعی که اجرا شده است را ببینید.

همچنین می‌توانید با کد زیر به صورت خاص بررسی کنید که آیا روی نخ اصلی قرار دارید یا نه:

Thread.current.isMainThread

تقریباً همیشه از Async استفاده کنید

این یکی از ساده‌ترین اشتباهاتی است که در زمان استفاده از threading مرتکب می‌شویم، اما جلوگیری از آن نیز دقیقاً به همین سادگی است.

استفاده از متدهای همگام (Sync) در کد مزیت‌هایی دارد و در برخی موارد خاص هم به آن نیاز داریم، اما برای کسی که به تازگی برنامه‌نویسی iOS را آغاز کرده است، اجتناب از متدهای همگام بهترین رویه محسوب می‌شود. بنابراین هرگز مانند کاری که در مثال زیر انجام یافته، روی DispatchQueue اصلی متد sync فراخوانی نکنید:

Threading در سوئیفت

همچنین از استفاده از sync روی صف userInteractive. خودداری کنید، زیرا در همان سطح اولویت صف اصلی است.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
better-programming
نظر شما چیست؟

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