GCD (Grand Central Dispatch) পরিচিতি

মাল্টিথ্রেডিং এবং কনকারেন্সি - সুইফট প্রোগ্রামিং (Swift Programming) - Computer Programming

374

Swift-এ GCD (Grand Central Dispatch) হলো একটি শক্তিশালী টুল, যা Concurrency বা একাধিক কাজ একসাথে সমান্তরালভাবে সম্পন্ন করতে ব্যবহৃত হয়। এটি Apple-এর একটি API, যা ব্যাকগ্রাউন্ড থ্রেড বা কাজ চালাতে সাহায্য করে, ফলে প্রোগ্রাম আরও কার্যকর এবং দ্রুতগতিসম্পন্ন হয়। GCD ব্যবহার করে আমরা সহজেই অ্যাসিনক্রোনাস কাজ (যেমন, নেটওয়ার্ক কল, ব্যাকগ্রাউন্ড প্রসেসিং) সম্পন্ন করতে পারি এবং মেইন থ্রেডে কাজ করতে পারি, যাতে ইউজার ইন্টারফেস (UI) সঠিকভাবে রেসপন্স করে।


GCD কীভাবে কাজ করে?

GCD মূলত কিউ (Queue) এবং টাস্ক (Task) এর ভিত্তিতে কাজ করে। Queue-তে আমরা যে কাজগুলো পাঠাই, সেগুলো একটি নির্দিষ্ট ক্রমে বা সমান্তরালভাবে সম্পন্ন হয়। GCD দুটি ধরনের কিউ ব্যবহার করে:

  1. Serial Queue: এই কিউ-তে একবারে একটি কাজ সম্পন্ন হয়। প্রতিটি কাজ একটি নির্দিষ্ট ক্রমে সম্পন্ন হয়।
  2. Concurrent Queue: এই কিউ-তে একাধিক কাজ একই সাথে সম্পন্ন হতে পারে। এখানে কাজগুলো একে অপরের সাথে সমান্তরালভাবে চলতে পারে।

GCD-তে আমরা প্রধানত তিনটি কিউ ব্যবহার করি:

  • Main Queue: এটি মেইন থ্রেডে কাজ করে এবং UI আপডেটের জন্য ব্যবহৃত হয়। এটি একটি সিরিয়াল কিউ।
  • Global Queue: এটি একটি কনকারেন্ট কিউ এবং সাধারণত ব্যাকগ্রাউন্ড টাস্ক সম্পন্ন করতে ব্যবহৃত হয়।
  • Custom Queue: আপনি চাইলে নিজের কাস্টম কিউ তৈরি করে কাজ সম্পন্ন করতে পারেন।

GCD ব্যবহার: একটি সাধারণ উদাহরণ

DispatchQueue.global().async {
    // ব্যাকগ্রাউন্ড কাজ
    print("This is a background task.")
    
    // মেইন থ্রেডে কাজ সম্পন্ন করা
    DispatchQueue.main.async {
        print("This is executed on the main thread.")
    }
}
  • DispatchQueue.global().async: এখানে, আমরা একটি গ্লোবাল কনকারেন্ট কিউ ব্যবহার করে একটি ব্যাকগ্রাউন্ড টাস্ক চালাচ্ছি।
  • DispatchQueue.main.async: ব্যাকগ্রাউন্ড টাস্ক শেষ হওয়ার পর, আমরা মেইন থ্রেডে কাজ সম্পন্ন করছি (যেমন UI আপডেট)।

সিরিয়াল এবং কনকারেন্ট কিউ

১. সিরিয়াল কিউ

let serialQueue = DispatchQueue(label: "com.example.serialQueue")

serialQueue.async {
    for i in 1...5 {
        print("Task 1 - \(i)")
    }
}

serialQueue.async {
    for i in 1...5 {
        print("Task 2 - \(i)")
    }
}
  • এখানে, একটি সিরিয়াল কিউ তৈরি করা হয়েছে। এই কিউ-তে কাজগুলো একটি নির্দিষ্ট ক্রমে সম্পন্ন হয়। প্রথম কাজ শেষ না হওয়া পর্যন্ত দ্বিতীয় কাজ শুরু হয় না।

২. কনকারেন্ট কিউ

let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)

concurrentQueue.async {
    for i in 1...5 {
        print("Task 1 - \(i)")
    }
}

concurrentQueue.async {
    for i in 1...5 {
        print("Task 2 - \(i)")
    }
}
  • এখানে, একটি কনকারেন্ট কিউ তৈরি করা হয়েছে। এই কিউ-তে একাধিক কাজ একসাথে চলতে পারে এবং তারা সমান্তরালভাবে সম্পন্ন হয়।

সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস কাজ

Swift-এ GCD-তে sync এবং async মেথড ব্যবহার করা হয় কাজগুলো সিঙ্ক্রোনাস বা অ্যাসিনক্রোনাস ভাবে সম্পন্ন করতে।

  • sync: এটি সিঙ্ক্রোনাস কাজ সম্পন্ন করে, অর্থাৎ কাজটি সম্পন্ন না হওয়া পর্যন্ত প্রোগ্রাম থেমে থাকে।
  • async: এটি অ্যাসিনক্রোনাস কাজ সম্পন্ন করে, অর্থাৎ কাজটি ব্যাকগ্রাউন্ডে চলে এবং প্রোগ্রাম চলতে থাকে।

উদাহরণ: sync এবং async

let queue = DispatchQueue(label: "com.example.queue")

queue.sync {
    for i in 1...5 {
        print("Sync Task - \(i)")
    }
}

queue.async {
    for i in 1...5 {
        print("Async Task - \(i)")
    }
}

print("This is printed after sync task, but may appear before async task.")
  • sync মেথডের কারণে প্রথম কাজ সম্পন্ন না হওয়া পর্যন্ত পরবর্তী লাইন এক্সিকিউট হয় না।
  • async মেথডের কারণে কাজটি ব্যাকগ্রাউন্ডে চলে, ফলে পরবর্তী লাইন এক্সিকিউট হয়।

ডিলে করা বা বিলম্বিত কাজ (Delayed Execution)

GCD ব্যবহার করে কাজগুলো নির্দিষ্ট সময় পরে সম্পন্ন করা যায়।

DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
    print("This will be printed after a delay of 2 seconds.")
}
  • asyncAfter মেথড ব্যবহার করে আমরা মেইন কিউ-তে একটি কাজ ২ সেকেন্ড বিলম্বে সম্পন্ন করছি।

কাজের গ্রুপ (Dispatch Group)

GCD-তে Dispatch Group ব্যবহার করে একাধিক কাজ একত্রে গ্রুপ আকারে চালানো এবং সব কাজ শেষ হওয়ার পর নির্দিষ্ট কাজ সম্পন্ন করা যায়।

let group = DispatchGroup()
let queue = DispatchQueue.global()

queue.async(group: group) {
    for i in 1...3 {
        print("Task 1 - \(i)")
    }
}

queue.async(group: group) {
    for i in 1...3 {
        print("Task 2 - \(i)")
    }
}

group.notify(queue: DispatchQueue.main) {
    print("All tasks are completed.")
}
  • DispatchGroup ব্যবহার করে দুটি কাজ একটি গ্রুপে সংগঠিত করা হয়েছে। সব কাজ শেষ হলে notify মেথড ব্যবহার করে মেইন থ্রেডে একটি কাজ সম্পন্ন করা হয়েছে।

উপসংহার

Swift-এ GCD (Grand Central Dispatch) হলো একটি শক্তিশালী কনকারেন্সি টুল, যা প্রোগ্রামকে আরও কার্যকর, দ্রুত এবং রেসপন্সিভ করে।

  • সিরিয়াল এবং কনকারেন্ট কিউ ব্যবহার করে বিভিন্ন ধরনের কাজ সম্পন্ন করা যায়।
  • sync এবং async মেথড ব্যবহার করে সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস কাজ করা যায়।
  • Dispatch Group এবং asyncAfter এর মতো টুলগুলো ব্যবহার করে কাজের সমন্বয় এবং বিলম্বিত কাজ পরিচালনা করা সম্ভব।

GCD Swift-এ কনকারেন্সি এবং মাল্টিথ্রেডিং পরিচালনা করার জন্য একটি অত্যন্ত কার্যকর এবং সহজলভ্য উপায়।

Content added By
Promotion

Are you sure to start over?

Loading...