আপনার রুবি প্রজেক্ট থেকে সর্বোচ্চ পারফরম্যান্স পেতে চাইলে ফাইবার এবং এর কাজ করার পদ্ধতি অন্বেষণ করতে হবে।
একটি সহজ প্রশ্ন দিয়ে শুরু করা যাক…
ফাইবার কী?
ফাইবার হলো ওয়ার্কার, সেগুলো কোড চালায় এবং নিজস্ব প্রগ্রেস ট্র্যাক করে। অন্য কথায়, ফাইবার হলো একটি কনকারেন্সি মেকানিজম।
হ্যাঁ! ঠিক থ্রেডের মতো। পার্থক্য হলো আপনার ফাইবারের ওপর থ্রেডের চেয়ে বেশি কন্ট্রোল থাকে।
কোন অর্থে বেশি কন্ট্রোল?
আপনার অপারেটিং সিস্টেম ডিসাইড করে কবে থ্রেড চালাবে এবং কবে পজ করবে।
ফাইবারের সাথে এটা সত্য নয়!
আপনাকে স্পষ্টভাবে বলতে হবে ফাইবার কবে চালাবে এবং কবে থামাবে।
ফাইবার বনাম থ্রেড
থ্রেড মনে হয় ব্যাকগ্রাউন্ডে চলছে, তাদের কাজ করছে।
ফাইবার এটা করে না।
যতক্ষণ একটি ফাইবার চলে, সেটি মেইন প্রোগ্রাম হয়ে যায় যতক্ষণ আপনি এটাকে থামাতে না।
একটি কোড উদাহরণ দেখি!
ফাইবার ব্যবহার: একটি উদাহরণ
Fiber.new এবং একটি ব্লক দিয়ে একটি ফাইবার তৈরি করুন।
উদাহরণ:
f = Fiber.new { puts 1 }
তারপর resume মেথড দিয়ে ফাইবার চালান।
এভাবে:
f.resume
এটি 1 প্রিন্ট করবে এবং কন্ট্রোল আপনার মেইন প্রোগ্রামে ফেরত দেবে।
কিন্তু ফাইবার কীভাবে থামাবেন?
Fiber.yield মেথড দিয়ে, যা ব্লক জন্য ব্যবহৃত yield কিওয়ার্ড থেকে আলাদা।
উদাহরণ:
f = Fiber.new { puts 1; Fiber.yield; puts 2 }
f.resume # 1
f.resume # 2
এটি resume দিয়ে ফাইবার শুরু করার পর 1 প্রিন্ট করবে, তারপর থামবে।
আপনি আবার resume কল করলে…
এটি ঠিক যেখানে ছেড়েছিল সেখান থেকে চালিয়ে 2 প্রিন্ট করবে।
নোট: এই ফাইবার আবার
resumeকরলেFiberError: dead fiber calledহবে কারণ আর কোনো কোড রান করার নেই।
এই কারণেই ফাইবার উপকারী!
একটি ফাইবারের ভেতরে Fiber.yield কল করা 마치 একটি পজ বাটন চাপা। এর মাধ্যমে আপনি লুপের মাঝপথে, বা ফাইবারের ব্লকের ভেতরে যেকোনো কোডে থামতে পারেন।
ফাইবার এবং লুপ: এন্ডলেস সিকোয়েন্স
এই "পজ বাটন" ইফেক্ট ব্যবহার করে আমরা একটি ইনফাইনিট সিকোয়েন্স তৈরি করতে পারি।
উপাদান:
- ফাইবার
- লুপ
- কাউন্টার
উদাহরণস্বরূপ, ফ্যাক্টোরিয়াল নম্বর:
factorial = Fiber.new do
count = 1
loop do
Fiber.yield (1..count).inject(:*)
count += 1
end
end
আপনি এই ফাইবারটি যতবার ইচ্ছা resume মেথড দিয়ে কল করতে পারেন, সিকোয়েন্সের পরবর্তী নম্বর পাওয়ার জন্য।
উদাহরণ:
Array.new(5) { factorial.resume }
# [1, 2, 6, 24, 120]
খুব ভালো!
ফাইবার এবং IO: অ্যাসিনক্রোনাস অপারেশন
ফাইবার থ্রেডের চেয়ে দ্রুত এবং দক্ষ তাদের জন্য যেগুলো আপনাকে অপেক্ষা করতে হয়, যেমন নেটওয়ার্ক কানেকশন।
কেন?
কারণ ফাইবার কম কনটেক্সট সুইচ তৈরি করে।
একটি কনটেক্সট সুইচ হলো যখন সিপিইউ বর্তমান টাস্ক থেকে অন্য টাস্কে স্যুইচ করে।
এটার একটি ছোট খামর আছে, কিন্তু এটি যোগ হয়ে যায়!
লিনাক্সের perf টুল দিয়ে আমি কিছু টেস্ট করলাম, এবং একটি সিম্পল রুবি অ্যাপ্লিকেশনে ফাইবার থ্রেডের চেয়ে ৩ গুন কম কনটেক্সট সুইচ তৈরি করে দেখলাম।
ভালো লাগলো?
আপনি এখনই ফাইবার ব্যবহার শুরু করতে পারেন:
IO.selectমেথড + রিয়্যাক্টর ডিজাইন প্যাটার্নasyncজেমfalconঅ্যাপ্লিকেশন সার্ভার
یাদ রাখুন…
কোনো ম্যাজিক বুলেট নেই, কিন্তু টেস্ট করে দেখতে হয় ফাইবার আপনার জন্য কী করতে পারে 🙂
সারসংক্ষেপ
আপনি রুবি ফাইবার সম্পর্কে শিখলেন! একটি ফাইবার আপনাকে একটি কোড ইউনিট তৈরি করতে দেয় যা আপনার নিজের ইচ্ছা অনুযায়ী পজ ও রিজিউম করা যায়।
এখন আপনার পালা এটি ট্রাই করার।
পড়ার জন্য ধন্যবাদ!