কম্পিউটার টিউটোরিয়াল

Grand Central Dispatch (GCD) - পরিচিতি ও ব্যবহার

Grand Central Dispatch (GCD) — Apple-এর Mac OS X এবং iOS অপারেটিং সিস্টেমের জন্য একটি টেকনোলজি যা C ভাষায় এক্সটেনশন, একটি API এবং একটি রান-টাইম লাইব্রেরির সমন্বয়। এটি অ্যাপ্লিকেশন ডেভেলপারদের কোডের কোন অংশ প্যარালেলে রান হবে সেটি চিহ্নিত করতে দেয়। OpenMP-এর মতো GCD থ্রেডিং এর অধিকাংশ ডিটেইলস ম্যানেজ করে।

GCD C এবং C++ ভাষায় ব্লক এক্সটেনশন চিহ্নিত করে। একটি ব্লক হলো স্বয়ংসম্পূর্ণ কাজের একক। এটি কেয়ারেট (^) এবং ব্রেস { } দিয়ে নির্দিষ্ট করা হয়। উদাহরণ:

{ 
    ^printf("This is a block"); 
}

এটি ব্লকগুলো ডিসপ্যাচ কিউ-তে রাখে রান-টাইম এক্সিকিউশনের জন্য। কিউ থেকে ব্লক বের করলে এটি থ্রেড পুল থেকে উপলব্ধ একটি থ্রেডে অ্যাসাইন করা হয়। GCD দুটি ধরণের ডিসপ্যাচ কিউ চিহ্নিত করে: সিরিয়াল এবং কনকারেন্ট।

  • সিরিয়াল কিউ: ব্লকগুলো FIFO আর্ডারে বের হয়। একটা ব্লক সম্পূর্ণ এক্সিকিউট হওয়া পর্যন্ত অন্যটি বের হয় না। প্রতিটি প্রসেসের নিজস্ব সিরিয়াল কিউ থাকে (main queue)। ডেভেলপাররা প্রসেস-লোকাল অতিরিক্ত সিরিয়াল কিউ তৈরি করতে পারে। সিকোয়েনশিয়াল এক্সিকিউশন নিশ্চিত করতে সিরিয়াল কিউ উপযোগী।
  • কনকারেন্ট কিউ: ব্লকগুলো FIFO আর্ডারে বের হয় কিন্তু একসাথে একাধিক ব্লক বের হতে পারে, ফলে প্যারালেল এক্সিকিউশন সম্ভব। তিনটি সিস্টেম-ওয়াইড কনকারেন্ট ডিসপ্যাচ কিউ রয়েছে: low, default, এবং high প্রায়োরিটি অনুযায়ী। বেশি প্রায়োরিটি যেই ব্লকগুলো তাদের high priority queue-তে রাখা উচিত।

ডিফল্ট-প্রায়োরিটি কনকারেন্ট কিউ পাওয়া এবং dispatch_async() দিয়ে ব্লক সাবমিট করার উদাহরণ:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{ printf("This is a block."); });

অভ্যন্তরীণভাবে GCD-এর থ্রেড পুল POSIX থ্রেড দিয়ে গঠিত। GCD সক্রিয়ভাবে পুল ম্যানেজ করে, অ্যাপ্লিকেশন ডিমান্ড এবং সিস্টেম ক্যাপাসিটি অনুযায়ী থ্রেড সংখ্যা বাড়ায়-কমায়।

  1. জাভাস্ক্রিপ্টে কিউ (Queue) ডেটা স্ট্রাকচার: কনসেপ্ট ও বেসিক

  2. জাভাস্ক্রিপ্টে ব্লক স্কোপিং

  3. জাভাস্ক্রিপ্টে কিউ (Queue) বাস্তবায়ন

  4. iOS কনকারেন্সি মাষ্টার করুন: GCD কিউ এবং এক্সিকিউশন মোড বুঝুন