একটি সারি একটি অপেক্ষা তালিকার মত।
কল্পনা করুন যে আপনি অ্যাপলের সর্বশেষ পণ্য কেনার জন্য, সিনেমার টিকিট পেতে বা আপনার মুদির জন্য অর্থ প্রদানের জন্য লাইনে অপেক্ষা করছেন।
এগুলি সারি!
আপনি আপনার রুবি প্রকল্পগুলিতে সারি ব্যবহার করতে পারেন।
কিভাবে?
সারিগুলি আপনাকে আগমনের ক্রমে জিনিসগুলি প্রক্রিয়া করার অনুমতি দেয়, তাই তারা যেকোন কিছুর জন্য সহায়ক হতে পারে যেগুলির জন্য তারা যতক্ষণ অপেক্ষা করছে ততদিন অগ্রাধিকার দেওয়া প্রয়োজন৷
আপনি এটি প্রয়োগ করতে পারেন৷ :
- একটি বাস্তব-বিশ্বের সারি মডেল করুন
- ব্রেডথ-ফার্স্ট সার্চ (BFS) এর মত অ্যালগরিদম প্রয়োগ করুন
- সিপিইউ, ডিস্ক, প্রিন্টার ইত্যাদির মতো শেয়ার্ড রিসোর্সে অ্যাক্সেস নিয়ন্ত্রণ করুন।
এখন…
আসুন কিছু কোড দেখি!
রুবিতে একটি সারি কীভাবে প্রয়োগ করবেন
একটি অ্যারে একটি Queue
মত আচরণ করতে পারে যদি আপনি সঠিক পদ্ধতি ব্যবহার করেন।
এই পদ্ধতিগুলি হল :
unshift
(বাprepend
রুবি 2.5+ সহ)pop
যখন আপনি unshift
করেন , আপনি সারিতে একটি আইটেম যোগ করছেন।
উদাহরণ :
queue = [] queue.unshift "apple" queue.unshift "orange" queue.unshift "banana" # ["banana", "orange", "apple"]
যখন আপনি pop
, আপনি সারি থেকে শেষ আইটেমটি সরান।
এটি পরবর্তী আইটেম যা প্রক্রিয়া করা উচিত।
উদাহরণ :
queue.pop # "apple" queue.pop # "orange"
আপনি শেষ আইটেমটি দেখতে পারেন, এই আইটেমটি না সরিয়ে "কে পরবর্তী" দেখতে পারেন৷
উদাহরণ :
queue[-1] # "banana"
এই অপারেশনটিকে peek
বলা হয় .
রুবি সমবর্তী সারি
রুবির একটি সঠিক থ্রেড-নিরাপদ, ব্লকিং, Queue
আছে ক্লাস।
আপনি একটি মাল্টি-থ্রেডেড প্রোগ্রামে কাজ সমন্বয় করার জন্য এই সারি ব্যবহার করতে পারেন।
উদাহরণ :
que = Queue.new que << 1 que << 2 que << 3
আপনি pop
দিয়ে এই সারি থেকে একটি আইটেম পেতে পারেন :
que.pop # 1 que.pop # 2
সারি খালি থাকলে, pop
কল করা আপনার বর্তমান থ্রেডকে ঘুমাতে দেবে এবং সারিতে কিছু যোগ না হওয়া পর্যন্ত অপেক্ষা করুন .
"ব্লক" করার মানে এটাই।
আপনি true
পাস করে ব্লক করা এড়াতে পারেন pop
করতে :
que.pop(true)
এটি একটি ThreadError: queue empty
বাড়াবে ব্যতিক্রম যখন সারি খালি থাকে।
কিভাবে একটি আকারের সারি ব্যবহার করবেন
একটি আকারের সারি একটি নিয়মিত সারির সমান কিন্তু একটি আকার সীমা সহ৷
উদাহরণ :
que = SizedQueue.new(5)
সারি পূর্ণ হলে, push
(<<
এর মতই ) অপারেশন বর্তমান থ্রেডটিকে স্থগিত করবে যতক্ষণ না একটি আইটেম সারি থেকে সরানো হয়।
উদাহরণ :
que.push(:bacon)
আপনি true
পাস করে পরিবর্তে একটি ব্যতিক্রম উত্থাপন করতে বেছে নিতে পারেন একটি যুক্তি হিসাবে:
que.push(:bacon, true)
এটি ThreadError: queue full
উত্থাপন করে .
ভিডিও টিউটোরিয়াল
সারাংশ
আপনি রুবি সারি সম্পর্কে শিখেছেন!
FIFO (ফার্স্ট-ইন-ফার্স্ট-আউট) অর্ডারে কাজ প্রক্রিয়া করার প্রয়োজন হলে আপনি একটি সারি ব্যবহার করতে পারেন . একটি সারি কার্যকর করার দুটি উপায় আছে৷ , একটি অ্যারে ব্যবহার করে, অথবা Queue
ব্যবহার করে ক্লাস।
পড়ার জন্য ধন্যবাদ. 🙂