রাস্টে, অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং এমন সব অপারেশনকে উপস্থাপন করতে ফিউচার (futures) ধারণার উপর নির্ভর করে, যেগুলো হয়তো তাৎক্ষণিকভাবে সম্পন্ন না হয়েও দীর্ঘ সময় ধরে চলতে পারে। এই ফিউচারগুলোর সম্পাদন ও সমাপ্তি চালনা করার জন্য একটি পদ্ধতির প্রয়োজন হয়। এখানেই অ্যাসিঙ্ক এক্সিকিউটর (async executors) কাজে আসে।
একটি অ্যাসিঙ্ক এক্সিকিউটর এই ফিউচারগুলো পরিচালনা এবং চালানোর জন্য দায়ী। এটি এমন একটি পরিবেশ প্রদান করে যেখানে ফিউচারগুলোকে শিডিউল করা যায়, অগ্রগতির জন্য পোল করা যায় এবং অবশেষে সম্পূর্ণ করা যায়। এটিকে এমন একটি অর্কেস্ট্রেটর হিসেবে ভাবা যেতে পারে যা অ্যাসিঙ্ক্রোনাস টাস্কের জটিলতাগুলো সামাল দেয়, যার ফলে আপনার কোড রেসপন্সিভ এবং দক্ষ থাকে।
রাস্ট বিভিন্ন ধরনের অ্যাসিঙ্ক এক্সিকিউটর প্রদান করে, যেগুলোর প্রত্যেকটির নিজস্ব শক্তি ও বৈশিষ্ট্য রয়েছে।
অ্যাসিঙ্ক্রোনাস এক্সিকিউটর
আপনার রাস্ট সার্ভিসের জন্য এক্সিকিউটরের নির্বাচন মূলত এর ওয়ার্কলোডের প্রকৃতির উপর নির্ভর করে। যদিও টোকিও একটি শক্তিশালী অ্যাসিঙ্ক্রোনাস রানটাইম, এটি সব পরিস্থিতির জন্য সর্বোত্তম সমাধান নাও হতে পারে।
যেসব সার্ভিস প্রধানত অনুক্রমিক অপারেশন সম্পাদন করে, সেগুলোর ক্ষেত্রে টোকিওর মতো একটি অ্যাসিঙ্ক্রোনাস রানটাইম যুক্ত করলে তা উল্লেখযোগ্য পারফরম্যান্স বৃদ্ধি না করেই অপ্রয়োজনীয় ওভারহেড তৈরি করতে পারে। এই ধরনের ক্ষেত্রে, একটি সিঙ্গেল-থ্রেডেড এক্সিকিউটর আরও উপযুক্ত এবং হালকা বিকল্প হতে পারে। এই পদ্ধতিটি কোডবেসকে সরল করে এবং রিসোর্স ব্যবহার কমায়।
ওয়ার্কার থ্রেড কনফিগার করুন
যেসব সার্ভিসে সহজাতভাবেই কনকারেন্ট বা অ্যাসিঙ্ক্রোনাস অপারেশন থাকে, সেগুলোর ক্ষেত্রে টোকিও-র মতো একটি অ্যাসিঙ্ক্রোনাস রানটাইমের সক্ষমতা কাজে লাগানো অত্যন্ত গুরুত্বপূর্ণ হয়ে ওঠে। এই ধরনের পরিস্থিতিতে পারফরম্যান্স সর্বোচ্চ করতে, রানটাইমটিকে এমনভাবে কনফিগার করুন যাতে এটি সিস্টেমে উপলব্ধ সিপিইউ কোরের সংখ্যার সমান সংখ্যক ওয়ার্কার থ্রেড ব্যবহার করে। এর ফলে রানটাইমটি দক্ষতার সাথে কাজের চাপ বন্টন করতে পারে এবং উপলব্ধ প্রসেসিং ক্ষমতার পূর্ণ সদ্ব্যবহার করতে পারে।
ওয়ার্কার থ্রেড কনফিগার করার সময় সামগ্রিক সিস্টেম পরিবেশ বিবেচনা করুন। যদি একই ভার্চুয়াল মেশিনে একাধিক সার্ভিস সক্রিয়ভাবে চলে, তবে সিপিইউ-এর অতিরিক্ত ব্যবহার রোধ করতে এবং সমস্ত সক্রিয় প্রসেসের মধ্যে সম্পদের ন্যায্য বণ্টন নিশ্চিত করতে প্রতিটি সার্ভিসের জন্য ওয়ার্কার থ্রেডের সংখ্যা সমন্বয় করুন।
ব্লকিং অপারেশন
এটা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ যে একটি অ্যাসিঙ্ক্রোনাস রানটাইমের ভেতরের ওয়ার্কার থ্রেডগুলো যেন দীর্ঘস্থায়ী বা সিঙ্ক্রোনাস অপারেশনের কারণে কখনো ব্লক না হয়। একটি ওয়ার্কার থ্রেড ব্লক হয়ে গেলে তা রানটাইমের আগত টাস্ক প্রসেস করার এবং রেসপন্সিভনেস বজায় রাখার ক্ষমতাকে মারাত্মকভাবে ব্যাহত করতে পারে।
যদি কোনো ওয়ার্কার থ্রেডে চলমান ফাংশনকে একটি ব্লকিং অপারেশন সম্পাদন করতে হয়, তাহলে tokio::spawn_blocking ব্যবহার করুন। এই ফাংশনটি ব্লকিং অপারেশনটিকে এই ধরনের কাজের জন্য বিশেষভাবে ডিজাইন করা একটি পৃথক থ্রেড পুলে স্থানান্তর করে, যা অ্যাসিঙ্ক্রোনাস ওয়ার্কার থ্রেডগুলিতে কোনও ব্যাঘাত ঘটতে দেয় না এবং পরিষেবাটির সামগ্রিক প্রতিক্রিয়াশীলতা নিশ্চিত করে।