আপনি যদি আপনার রুবি প্রকল্পগুলি থেকে সর্বাধিক পারফরম্যান্স পেতে চান তবে আমাদের ফাইবারগুলি অন্বেষণ করতে হবে এবং সেগুলি কীভাবে কাজ করে৷
একটি সহজ প্রশ্ন দিয়ে শুরু করা যাক...
ফাইবার কি?
ফাইবাররা শ্রমিক, তারা কোড চালায় এবং তাদের নিজস্ব অগ্রগতি ট্র্যাক রাখে। অন্য কথায়, ফাইবার হল একটি সমবায় প্রক্রিয়া।
হ্যাঁ!
ঠিক থ্রেড মত. পার্থক্যের সাথে যে আপনার থ্রেডের চেয়ে ফাইবারগুলির উপর বেশি নিয়ন্ত্রণ রয়েছে।
কোন অর্থে আপনার বেশি নিয়ন্ত্রণ আছে?
ভাল।
আপনার অপারেটিং সিস্টেম সিদ্ধান্ত নেয় কখন থ্রেড চালাতে হবে এবং কখন বিরতি দিতে হবে।
ফাইবারের ক্ষেত্রে তা নয়!
আপনাকে একটি ফাইবার বলতে হবে ঠিক কখন চালাতে হবে এবং কখন থামতে হবে।
ফাইবার বনাম থ্রেড
থ্রেডগুলি মনে হচ্ছে তারা ব্যাকগ্রাউন্ডে চলছে, তাদের কাজ করছে৷
৷ফাইবার এটি করে না৷৷
যখন একটি ফাইবার চলছে তখন আপনি এটি বন্ধ না করা পর্যন্ত এটি প্রধান প্রোগ্রাম হয়ে ওঠে৷
আসুন একটি কোড উদাহরণ দেখি!
ফাইবার ব্যবহার করা:একটি উদাহরণ
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রাখে
এটি 1
প্রিন্ট করবে resume
দিয়ে ফাইবার শুরু করার পর , তারপর থামুন।
আপনি resume
কল করলে আবার…
এটি ঠিক যেখান থেকে ছেড়েছিল সেখান থেকে এটি চলতে থাকবে এবং 2
প্রিন্ট করবে .
দ্রষ্টব্য :এই ফাইবারটি আবার চালু করার ফলে
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]
চমৎকার!
ফাইবার এবং আইও:অ্যাসিঙ্ক অপারেশনগুলি
নেটওয়ার্ক সংযোগের মতো আপনাকে অপেক্ষা করতে হবে এমন জিনিসগুলির জন্য থ্রেডের চেয়ে ফাইবারগুলি দ্রুত এবং আরও কার্যকর৷
কেন?
কারণ ফাইবার কম কনটেক্সট সুইচের ফলে।
একটি প্রসঙ্গ সুইচ হল যখন CPU বর্তমান টাস্ক থেকে অন্য টাস্কে পরিবর্তিত হয়।
এতে একটি ছোট খরচ আছে, কিন্তু এটি যোগ করে!
আমি Linux-এর পারফ টুল ব্যবহার করে কিছু পরীক্ষা করেছিলাম এবং আমি দেখতে পেয়েছি যে একটি সাধারণ রুবি অ্যাপ্লিকেশনে, ফাইবারগুলি থ্রেডের তুলনায় 3 গুণ কম কনটেক্সট সুইচ তৈরি করে।
ভালো লাগছে?
আপনি এখনই ফাইবার ব্যবহার শুরু করতে পারেন :
-
IO.select
দিয়ে পদ্ধতি + চুল্লি নকশা প্যাটার্ন - অ্যাসিঙ্ক রত্ন সহ
- ফ্যালকন অ্যাপ্লিকেশন সার্ভারের সাথে
মনে রাখবেন…
কোন ম্যাজিক বুলেট নেই, তবে এটি পরীক্ষা করার মতো এবং দেখুন ফাইবারগুলি আপনার জন্য কী করতে পারে 🙂
সারাংশ
আপনি রুবি মধ্যে ফাইবার সম্পর্কে শিখেছি! একটি ফাইবার আপনাকে কোডের একটি ইউনিট তৈরি করতে দেয় যা আপনার নিজের ইচ্ছায় বিরতি এবং পুনরায় শুরু করা যেতে পারে .
এখন এটি চেষ্টা করার পালা আপনার।
পড়ার জন্য ধন্যবাদ!