মোবাইল ডেভেলপমেন্টে মাল্টিথ্রেডিং এবং কনকারেন্সি: এটি কী, নীতি এবং কীভাবে কাজ করে

লেখক: IT Sectr প্রকাশিত: 2026-03-12 পড়ার সময়: 13 মিনিট

প্রতিটি মোবাইল অ্যাপ্লিকেশন একসাথে অনেক কাজ করে: নেটওয়ার্ক থেকে ডেটা লোড করা, ব্যবহারকারীর স্পর্শ প্রক্রিয়াকরণ, ইন্টারফেস অ্যানিমেট করা এবং ফাইল সংরক্ষণ করা। যদি এই সমস্ত কোড একটি একক থ্রেডে চলে, তবে যেকোনো নেটওয়ার্ক বিলম্বে অ্যাপ্লিকেশন হ্যাংল হয়ে যায়। মাল্টিথ্রেডিং এবং কনকারেন্সি হল মূল ধারণা যা অ্যাপ্লিকেশনকে প্রতিক্রিয়াশীল এবং দক্ষ থাকতে দেয়। এই নিবন্ধে আমরা সমস্ত প্রধান টুল কভার করব: Main Thread এবং RunLoop থেকে শুরু করে Kotlin করুটিন এবং iOS-এ Combine পর্যন্ত। উপাদানটি Apple-এর অফিসিয়াল GCD ডকুমেন্টেশন-এর উপর ভিত্তি করে তৈরি।

মূল পয়েন্ট

  • Main Thread — UI নিয়ে কাজ করার জন্য একমাত্র থ্রেড; বাকি সব কাজ Background-এ স্থানান্তরিত হয়
  • GCD এবং OperationQueue — iOS-এ মাল্টিথ্রেডিংয়ের প্রধান প্রক্রিয়া
  • Coroutines এবং Flow — Kotlin/Android-এ অ্যাসিঙ্ক্রোনাসির আধুনিক মান
  • RxJava, RxSwift এবং Combine — ডেটা স্ট্রিম নিয়ে কাজ করার জন্য রিয়েক্টিভ ফ্রেমওয়ার্ক
  • Race Condition, Deadlock এবং Livelock — মাল্টিথ্রেডিংয়ের ক্লাসিক সমস্যা যার সিঙ্ক্রোনাইজেশন প্রয়োজন
  • টুল নির্বাচন প্ল্যাটফর্ম এবং কাজের জটিলতার উপর নির্ভর করে: সাধারণ কলের জন্য Async/Await যথেষ্ট, জটিল স্ট্রিমের জন্য — Rx বা Combine

মাল্টিথ্রেডিং কী?

মাল্টিথ্রেডিং হল একটি অ্যাপ্লিকেশনের একসাথে কোডের একাধিক অংশ সম্পাদন করার ক্ষমতা। প্রতিটি অংশ একটি পৃথক থ্রেড (Thread)-এ চলে — নিজস্ব কল স্ট্যাক সহ একটি হালকা প্রক্রিয়া। মোবাইল ডেভেলপমেন্টে, থ্রেড দুটি বিভাগে বিভক্ত: Main Thread (UI থ্রেড) এবং Background Threads (পটভূমি থ্রেড)।

অপারেটিং সিস্টেম নিজেই প্রসেসর কোর জুড়ে থ্রেড বিতরণ পরিচালনা করে। আধুনিক ডিভাইসে 6–8 কোর থাকে, তাই সমান্তরাল সম্পাদন আসলে কাজকে গতি দিতে পারে। তবে, থ্রেড তৈরি করা একটি ব্যয়বহুল অপারেশন, তাই সরাসরি Thread নিয়ে কাজ করার পরামর্শ দেওয়া হয় না। পরিবর্তে, উচ্চ-স্তরের অ্যাবস্ট্রাকশন ব্যবহার করা হয়: DispatchQueue, OperationQueue, CoroutineDispatcher।

কনকারেন্সি মাল্টিথ্রেডিংয়ের চেয়ে বিস্তৃত ধারণা। কনকারেন্সি মানে হল যে কাজগুলি কনটেক্সট সুইচিংয়ের মাধ্যমে একটি একক কোরেও "একসাথে" সম্পাদন করা যেতে পারে। অ্যাসিঙ্ক্রোনাসি (Async/Await) হল একটি প্রোগ্রামিং মডেল যেখানে একটি কাজ থ্রেড ব্লক করে না, বরং ফলাফলের অপেক্ষায় নিয়ন্ত্রণ ফিরিয়ে দেয়। আধুনিক ভাষাগুলিতে (Kotlin, Swift, Dart) অন্তর্নির্মিত Async/Await সমর্থন রয়েছে।

IT Sectr-এ, আমরা প্রকল্পের শুরুতে সঠিক মাল্টিথ্রেডিং আর্কিটেকচারে বিশেষ মনোযোগ দিই। প্রাথমিক পর্যায়ে করা ভুলগুলি ধরা কঠিন বাগের দিকে নিয়ে যায়: ডেটা রেস, ডেডলক এবং লোডের অধীনে অ্যাপ্লিকেশনের অস্থিরতা। আমাদের প্রতিটি প্রকল্প পরিকল্পনা পর্যায়ে কনকারেন্সি আর্কিটেকচার পর্যালোচনার মধ্য দিয়ে যায়।

প্রধান থ্রেড (Main/Background)

Main Thread (প্রধান থ্রেড) — মোবাইল অ্যাপ্লিকেশনের একমাত্র থ্রেড যার UI-তে অ্যাক্সেস রয়েছে। Android-এ একে UI Thread বলা হয়, iOS-এ — Main Thread। সমস্ত ইন্টারফেস অপারেশন — টেক্সট পরিবর্তন, অ্যানিমেশন, স্পর্শ প্রক্রিয়াকরণ — শুধুমাত্র Main Thread-এ সম্পাদিত হয়। যদি প্রধান থ্রেডে একটি ভারী অপারেশন (ফাইল লোডিং, JSON পার্সিং) সম্পাদিত হয়, তবে ইন্টারফেস সাড়া দেওয়া বন্ধ করে দেয়। Android-এ এটি ANR (Application Not Responding)-এর দিকে নিয়ে যায়, iOS-এ — স্ক্রিন "ফ্রিজ" হয়ে যায়।

Background Threads (পটভূমি থ্রেড) UI-এর সাথে সম্পর্কিত নয় এমন সমস্ত কিছুর জন্য উদ্দিষ্ট: নেটওয়ার্ক অনুরোধ, ডেটাবেস অপারেশন, ইমেজ প্রসেসিং, ক্রিপ্টোগ্রাফি। সম্পূর্ণ হওয়ার পরে, ফলাফল প্রদর্শনের জন্য Main Thread-এ স্থানান্তরিত হয়। প্রতিটি প্ল্যাটফর্ম থ্রেডের মধ্যে স্যুইচ করার জন্য নিজস্ব টুল সরবরাহ করে: iOS-এ DispatchQueue.main.async, Android-এ runOnUiThread বা withContext(Dispatchers.Main)

RunLoop — iOS প্রধান থ্রেডে ইভেন্ট প্রসেসিং লুপ। RunLoop ইভেন্টের (স্পর্শ, টাইমার, বিজ্ঞপ্তি) জন্য অপেক্ষা করে এবং সেগুলি উপযুক্ত হ্যান্ডলারে প্রেরণ করে। Android-এ সমতুল্য হল Looper, যা প্রতিটি Main Thread-এর সাথে যুক্ত। Main Looper অসীমভাবে সারি থেকে বার্তা বের করে এবং প্রক্রিয়াকরণের জন্য Handler-এ পাঠায়। RunLoop এবং Looper বোঝা মেমরি লিক এবং ইন্টারফেস "জ্যামিং" এড়াতে সহায়তা করে।

GCD এবং OperationQueue (iOS)

Grand Central Dispatch (GCD) — C ভাষা স্তরে মাল্টিথ্রেডিং পরিচালনার জন্য Apple লাইব্রেরি। GCD DispatchQueue — কাজের সারির সাথে কাজ করে। ডেভেলপার ম্যানুয়ালি থ্রেড তৈরি করে না; GCD একটি থ্রেড পুল পরিচালনা করে, উপলব্ধ প্রসেসর কোর জুড়ে কাজ বিতরণ করে। DispatchQueue দুই প্রকার: Serial Queue (সিরিয়াল — কাজগুলি একের পর এক সম্পাদিত হয়) এবং Concurrent Queue (সমান্তরাল — কাজগুলি একসাথে সম্পাদিত হতে পারে)।

Main DispatchQueue — প্রধান থ্রেডের সাথে আবদ্ধ একটি সিরিয়াল সারি। Global Queues — বিভিন্ন অগ্রাধিকার (QoS — Quality of Service) সহ সমান্তরাল সারি: userInteractive, userInitiated, utility, background। সঠিক QoS নির্বাচন করা পারফরম্যান্সের জন্য গুরুত্বপূর্ণ: .userInteractive — UI-কে প্রভাবিত করে এমন কাজের জন্য (অ্যানিমেশন, রেন্ডারিং); .background — সময়-সমালোচনামূলক নয় এমন কাজের জন্য (সিঙ্ক্রোনাইজেশন, ক্যাশে পরিষ্কার করা)।

OperationQueue — অতিরিক্ত ক্ষমতা সহ GCD-এর উপর একটি অ্যাবস্ট্রাকশন: কাজ বাতিল করা, অপারেশনের মধ্যে নির্ভরতা সেট করা, সমান্তরাল অপারেশনের সর্বাধিক সংখ্যা নিয়ন্ত্রণ করা। অপারেশন — Operation ক্লাসের (বা BlockOperation) অবজেক্ট। উদাহরণ: যদি আপনাকে একটি ছবি লোড করতে হয়, তারপর একটি ফিল্টার প্রয়োগ করতে হয় এবং শুধুমাত্র তারপর এটি প্রদর্শন করতে হয় — OperationQueue নির্ভরতা সহ এটি পুরোপুরি পরিচালনা করে। GCD-তে আপনাকে DispatchGroup বা সেমাফোর ব্যবহার করে ম্যানুয়ালি এই ধাপগুলি সিঙ্ক্রোনাইজ করতে হত।

Swift 5.5+-এ Async/Await — GCD-এর একটি আধুনিক বিকল্প। কীওয়ার্ড async এবং await অ্যাসিঙ্ক্রোনাস কোডকে রৈখিক এবং পঠনযোগ্য করে তোলে। ফাংশনগুলি async হিসাবে চিহ্নিত করা হয় এবং কলগুলি await-এর মাধ্যমে অপেক্ষা করা হয়। সিস্টেম নিজেই কনটেক্সট সুইচিং পরিচালনা করে: ডিফল্টরূপে, একটি async ফাংশন পটভূমি থ্রেডে সম্পাদিত হয়, যখন UI আপডেট MainActor-এ সম্পাদিত হয়। @MainActor — একটি অ্যাট্রিবিউট যা প্রধান থ্রেডে কোড সম্পাদনের নিশ্চয়তা দেয়।

Coroutines এবং Flow (Kotlin)

Coroutines (করুটিন) — JetBrains দ্বারা বিকশিত Kotlin-এর জন্য হালকা থ্রেড। সাধারণ থ্রেডের বিপরীতে, করুটিনগুলি একটি নির্দিষ্ট Thread-এর সাথে আবদ্ধ নয়। হাজার হাজার করুটিন উল্লেখযোগ্য ওভারহেড ছাড়াই একাধিক থ্রেডে চলতে পারে। CoroutineScope করুটিনের জীবনচক্র পরিচালনা করে: viewModelScope ViewModel-এর সাথে আবদ্ধ, lifecycleScope — Activity/Fragment-এর সাথে। যখন স্কোপ ধ্বংস হয়, সমস্ত চাইল্ড করুটিন স্বয়ংক্রিয়ভাবে বাতিল হয়ে যায়।

Dispatchers নির্ধারণ করে কোন থ্রেড পুলে করুটিন চলে: Dispatchers.Main — UI থ্রেড; Dispatchers.IO — নেটওয়ার্ক অনুরোধ এবং ডিস্ক অপারেশনের জন্য; Dispatchers.Default — CPU-নিবিড় গণনার জন্য। ডিসপ্যাচার স্যুইচ করতে withContext ব্যবহার করা হয়। করুটিনগুলি স্ট্রাকচার্ড কনকারেন্সি সমর্থন করে: প্রতিটি করুটিনের একটি প্যারেন্ট থাকে এবং প্যারেন্ট বাতিল হলে সমস্ত চাইল্ড করুটিন বাতিল হয়। এটি মেমরি লিক এবং ঝুলন্ত কাজ প্রতিরোধ করে।

Flow — করুটিন লাইব্রেরি থেকে একটি কোল্ড অ্যাসিঙ্ক্রোনাস ডেটা স্ট্রিম। Flow ক্রমান্বয়ে মান নির্গত করে: (1) প্রযোজক ডেটা জেনারেট করে, (2) অপারেটর স্ট্রিম রূপান্তর করে, (3) সংগ্রাহক ফলাফল গ্রহণ করে। LiveData-এর বিপরীতে, Flow জটিল অপারেটর চেইন (map, filter, flatMapConcat, catch) সমর্থন করে এবং সম্পূর্ণ থ্রেড-নিরাপদ। StateFlow এবং SharedFlow — Flow-এর হট ভেরিয়েন্ট, UI অবস্থা এবং এককালীন ইভেন্টের (Snackbar, নেভিগেশন) জন্য আদর্শ।

Channel — করুটিনের মধ্যে ডেটা প্রেরণের জন্য আরেকটি করুটিন অ্যাবস্ট্রাকশন। Channel একটি সারির মতো কাজ করে: একজন প্রেরক (send) এবং এক বা একাধিক গ্রহীতা (receive)। বাফারযুক্ত চ্যানেল (Channel(UNLIMITED), Channel(BUFFERED)) ওভারফ্লোতে আচরণ কনফিগার করার অনুমতি দেয়। Channel প্রায়শই Flow-এর সাথে কলব্যাক-ভিত্তিক API কে করুটিনে ব্রিজ করার জন্য ব্যবহার করা হয়: callbackFlow { … }।

IT Sectr-এ আমরা সমস্ত Android প্রকল্পে সক্রিয়ভাবে করুটিন এবং Flow ব্যবহার করি। এটি অ্যাসিঙ্ক্রোনাস কোড লেখার অনুমতি দেয় যা সিঙ্ক্রোনাস দেখায়, পরীক্ষা করা সহজ (runTest, TestDispatcher) এবং ম্যানুয়াল থ্রেড পরিচালনার প্রয়োজন হয় না। ডেটা লোডিং সহ একটি সাধারণ করুটিনের উদাহরণ:

kotlin
class UserRepository(
    private val api: UserApi,
    private val dao: UserDao
) {
    suspend fun getUsers(): List<User> = withContext(Dispatchers.IO) {
        return@withContext try {
            val users = api.fetchUsers()
            dao.insertAll(users)
            users
        } catch (e: Exception) {
            dao.getAll()
        }
    }
}

Rx এবং Combine

রিয়েক্টিভ প্রোগ্রামিং — একটি প্যারাডাইম যেখানে ডেটা অ্যাসিঙ্ক্রোনাস স্ট্রিম (Observable, Publisher) হিসাবে প্রসারিত হয়। RxJava/RxKotlin — Android-এর জন্য সবচেয়ে জনপ্রিয় বাস্তবায়ন, .NET Rx থেকে পোর্ট করা। RxSwift — iOS-এর জন্য অনুরূপ লাইব্রেরি। প্রধান উপাদান: Observable (ইভেন্ট উৎস), Observer (সাবস্ক্রাইবার), Scheduler (থ্রেড পরিচালনা), Operators (স্ট্রিম রূপান্তর)।

Combine — iOS 13-এ প্রবর্তিত রিয়েক্টিভ প্রোগ্রামিংয়ের জন্য Apple ফ্রেমওয়ার্ক। Combine Publisher (প্রকাশক) এবং Subscriber (সাবস্ক্রাইবার) প্রোটোকল ব্যবহার করে। RxSwift-এর বিপরীতে, Combine SDK-তে নির্মিত এবং SwiftUI-এর সাথে ঘনিষ্ঠভাবে একীভূত। Combine-এ অপারেটর: map, filter, combineLatest, zip, debounce, throttle — ডেটা বাইন্ডিং থেকে UI এবং সার্চ কোয়েরি ডিবাউন্সিং পর্যন্ত বেশিরভাগ পরিস্থিতি কভার করে।

Future এবং Promise — একটি একক অ্যাসিঙ্ক্রোনাস ফলাফলের সাথে কাজ করার জন্য প্যাটার্ন। Future একটি মান উপস্থাপন করে যা পরে উপলব্ধ হবে। Promise একটি মান প্রদানের প্রতিশ্রুতি। Rx-এ এটি Single (একটি সফল প্রতিক্রিয়া বা ত্রুটি), Combine-এ — Future Publisher। অনুশীলনে, Future/Promise একক API অনুরোধের জন্য সুবিধাজনক, যখন Observable/Publisher — ধারাবাহিক স্ট্রিমের জন্য (জিওলোকেশন, টেক্সট ইনপুট)।

Callback এবং Delegate — অ্যাসিঙ্ক্রোনাস অপারেশনের জন্য ক্লাসিক প্যাটার্ন। Callback — একটি ফাংশন যা আর্গুমেন্ট হিসাবে পাস করা হয় এবং অপারেশন সম্পূর্ণ হলে কল করা হয়। Delegate — একটি অবজেক্ট যা ইভেন্ট হ্যান্ডলার পদ্ধতি সহ একটি প্রোটোকল প্রয়োগ করে। অসুবিধা: "callback hell" (নেস্টেড কলব্যাক) এবং ত্রুটি পরিচালনার জটিলতা। NotificationCenter (iOS) এবং EventBus (Android) — সম্প্রচার ইভেন্ট প্রক্রিয়া, শিথিলভাবে সংযুক্ত যোগাযোগের জন্য দরকারী কিন্তু অন্তর্নিহিত নির্ভরতার দিকে নিয়ে যায়।

মাল্টিথ্রেডিং সমস্যা (Race Condition, Deadlock)

মাল্টিথ্রেডিং উচ্চ কর্মক্ষমতার দরজা খোলে, কিন্তু একইসাথে ধরা কঠিন ত্রুটির ঝুঁকি তৈরি করে। সবচেয়ে সাধারণ: Race Condition (রেস কন্ডিশন), Deadlock (পারস্পরিক ব্লকিং), Livelock (সক্রিয় ব্লকিং) এবং Starvation (থ্রেড অনাহার)। এই সমস্যাগুলি বোঝা যেকোনো মোবাইল ডেভেলপারের জন্য একটি বাধ্যতামূলক দক্ষতা।

Race Condition

Race Condition ঘটে যখন দুই বা ততোধিক থ্রেড একই সময়ে সিঙ্ক্রোনাইজেশন ছাড়া একই ডেটা পড়ে এবং লেখে। ফলাফল নির্ভর করে কোন থ্রেড প্রথমে সম্পাদন করে তার উপর। ক্লাসিক উদাহরণ: দুই থ্রেড একটি কাউন্টার বৃদ্ধি করে। "পড়া → বৃদ্ধি → লেখা" অপারেশনটি পারমাণবিক নয়, তাই একসাথে সম্পাদিত হলে একটি বৃদ্ধি "হারিয়ে" যায়। সমাধান — পারমাণবিক অপারেশন (AtomicInteger, AtomicReference) বা লক (Mutex, Semaphore, synchronized) ব্যবহার করা।

Deadlock

Deadlock — একটি পরিস্থিতি যেখানে প্রতিটি থ্রেড একটি সংস্থান ধরে রাখে এবং অন্য থ্রেড দ্বারা দখলকৃত সংস্থানের জন্য অপেক্ষা করে। কোনো থ্রেডই এগিয়ে যেতে পারে না। 발생ের শর্ত: পারস্পরিক বর্জন, ধারণ এবং অপেক্ষা, কোন প্রিম্পশন নেই, চক্রাকার অপেক্ষা। প্রতিরোধ: লক অর্জনের একটি একক ক্রম স্থাপন, টাইমআউট সহ tryLock ব্যবহার, Lock-Free অ্যালগরিদম (ConcurrentHashMap, CopyOnWriteArrayList) প্রয়োগ।

Livelock এবং Starvation

Livelock — থ্রেডগুলি ব্লক না কিন্তু দরকারী কাজ না করে ক্রমাগত একে অপরকে সংস্থান "পাস" করে। উদাহরণ: দুই ব্যক্তি করিডোরে মিলিত হয় এবং উভয়েই একই দিকে সরে পথ ছেড়ে দেয়। Starvation — একটি থ্রেড সংস্থানে অ্যাক্সেস পায় না কারণ অন্যান্য থ্রেড ক্রমাগত এটি বাধা দেয়। সমাধান: ন্যায্য লক (fair locks), সাবধানে থ্রেড অগ্রাধিকার।

সিঙ্ক্রোনাইজেশন টুল

মাল্টিথ্রেডিং সমস্যা প্রতিরোধে সিঙ্ক্রোনাইজেশন প্রিমিটিভ ব্যবহার করা হয়: Mutex (পারস্পরিক বর্জন), Semaphore (একসাথে অ্যাক্সেসের সংখ্যা সীমিত করা), Lock (tryLock সহ ইন্টারফেস), Synchronized (JVM-স্তরের লক), @MainActor (Swift — প্রধান থ্রেডে সম্পাদনের নিশ্চয়তা)। Android-এ Executors.newFixedThreadPool, newCachedThreadPool-এর মাধ্যমে ThreadPool উপলব্ধ। তবে, ম্যানুয়াল পুল পরিচালনা লিগ্যাসি প্রকল্পের অধিকার; নতুন প্রকল্পে করুটিন ব্যবহার করা ভাল।

টুল প্ল্যাটফর্ম প্রকার বৈশিষ্ট্য
DispatchQueue (GCD)iOSকাজের সারিসিরিয়াল/সমান্তরাল, QoS অগ্রাধিকার, থ্রেড পুল সিস্টেম দ্বারা পরিচালিত
OperationQueueiOSঅপারেশন সারিনির্ভরতা, বাতিলকরণ, maxConcurrentOperationCount
Coroutines + FlowAndroidকরুটিনহালকা, স্ট্রাকচার্ড কনকারেন্সি, StateFlow, Channel
RxJava / RxKotlinAndroidরিয়েক্টিভ স্ট্রিমObservable, Schedulers, অপারেটরের সমৃদ্ধ সেট
CombineiOSরিয়েক্টিভ স্ট্রিমPublisher/Subscriber, SwiftUI ইন্টিগ্রেশন
Async/Await + TaskiOS / Androidঅ্যাসিঙ্ক্রোনাস মডেলরৈখিক কোড, @MainActor, স্ট্রাকচার্ড কনকারেন্সি

প্রায়শই জিজ্ঞাসিত প্রশ্ন

Main Thread এবং Background Thread-এর মধ্যে পার্থক্য কী?

Main Thread (UI থ্রেড) ইন্টারফেস রেন্ডারিং এবং স্পর্শ প্রক্রিয়াকরণের জন্য দায়ী। Background Thread পটভূমির কাজ করে — ডেটা লোডিং, গণনা, নেটওয়ার্ক কাজ। Main Thread ব্লক করা ইন্টারফেস জমে যাওয়ার কারণ (Android-এ ANR, iOS-এ frozen UI)।

Race Condition কী এবং কীভাবে এটি এড়ানো যায়?

Race Condition — রেস কন্ডিশন যখন দুই থ্রেড একসাথে শেয়ার্ড ডেটা অ্যাক্সেস করে এবং ফলাফল সম্পাদন ক্রমের উপর নির্ভর করে। সিঙ্ক্রোনাইজেশনের মাধ্যমে এড়ানো যায়: Mutex, Semaphore, Lock, Synchronized, @MainActor বা পারমাণবিক অপারেশন।

Coroutines না RxJava: Android-এর জন্য কী বেছে নেবেন?

Coroutines Android-এর জন্য আধুনিক মান (JetBrains, Google সমর্থিত)। RxJava/RxKotlin অপারেটরের সমৃদ্ধ সেট সহ একটি রিয়েক্টিভ পদ্ধতি। Coroutines অ্যাসিঙ্ক্রোনাস কলের জন্য সহজ, RxJava জটিল ডেটা স্ট্রিমের জন্য বেশি শক্তিশালী। IT Sectr-এ আমরা নতুন প্রকল্পের জন্য Coroutines + Flow ব্যবহার করি।

Deadlock এবং Livelock কী?

Deadlock — পারস্পরিক ব্লকিং যেখানে দুই থ্রেড একে অপরের সংস্থানের জন্য অপেক্ষা করে। Livelock — থ্রেড ব্লক না কিন্তু দরকারী কাজ না করে ক্রমাগত সংস্থান পাস করে। উভয় সমস্যা সঠিক লক ক্রম এবং টাইমআউট দ্বারা সমাধান করা হয়।

iOS-এ DispatchQueue কেন প্রয়োজন?

DispatchQueue থ্রেড পরিচালনার জন্য Grand Central Dispatch (GCD)-এর একটি অ্যাবস্ট্রাকশন। Main Queue প্রধান থ্রেডে কাজ সম্পাদন করে, Global Queues — পটভূমি থ্রেডে। Serial Queue ক্রমিক সম্পাদনের নিশ্চয়তা দেয়, Concurrent Queue — সমান্তরাল। আধুনিক প্রকল্পে GCD প্রায়ই Async/Await এবং Task দ্বারা প্রতিস্থাপিত হয়।

সারসংক্ষেপ

  • Main Thread — শুধুমাত্র UI; বাকি সব অপারেশন Background-এ
  • GCD এবং OperationQueue — iOS-এ মাল্টিথ্রেডিংয়ের ভিত্তি; Async/Await — আধুনিক বিকল্প
  • Coroutines এবং Flow — Android-এর জন্য মান; স্ট্রাকচার্ড কনকারেন্সি লিক প্রতিরোধ করে
  • RxJava, RxSwift, Combine — জটিল ডেটা স্ট্রিমের জন্য রিয়েক্টিভ ফ্রেমওয়ার্ক
  • Race Condition এবং Deadlock — প্রধান সমস্যা; লক এবং সঠিক সংস্থান অর্জন ক্রম দ্বারা সমাধান
  • Thread Pool সিস্টেম (GCD) বা ফ্রেমওয়ার্ক (করুটিন) দ্বারা পরিচালিত; ম্যানুয়াল থ্রেড তৈরি সুপারিশ করা হয় না
  • টুল নির্বাচন প্ল্যাটফর্মের উপর নির্ভর করে: Android-এর জন্য Coroutines, iOS-এর জন্য GCD/Combine

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন