Tokio এবং Async-Std হল Rust-এ asynchronous প্রোগ্রামিং এর জন্য জনপ্রিয় দুটি লাইব্রেরি। এই লাইব্রেরিগুলি non-blocking I/O, টাইমআউট, সাপোর্টেড ফিউচার এবং টাস্ক ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। এগুলি Rust-এ concurrency বা asynchronous অপারেশনগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ টুল।
- Tokio হল একটি asynchronous runtimes এবং I/O লাইব্রেরি যা highly performant অ্যাপ্লিকেশন তৈরির জন্য ব্যবহৃত হয়।
- Async-Std একটি অপেক্ষাকৃত সোজা লাইব্রেরি যা asynchronous স্ট্যান্ডার্ড লাইব্রেরি API প্রদান করে।
Tokio লাইব্রেরি
Tokio হল একটি asynchronous runtimes লাইব্রেরি যা Rust-এ non-blocking অপারেশন সহজ করে তোলে এবং সিস্টেম রিসোর্স কার্যকরভাবে ব্যবহারের জন্য কার্যকরী। এটি asynchronous I/O, সিপিইউ-বাউন্ড টাস্ক এবং টাইমার ম্যানেজমেন্টের জন্য ব্যবহৃত হয়।
Tokio ইনস্টল করা
Cargo.toml ফাইলে Tokio ডিপেন্ডেন্সি যোগ করতে হবে:
[dependencies]
tokio = { version = "1", features = ["full"] }এইভাবে, আপনি tokio লাইব্রেরির সমস্ত ফিচার সক্ষম করতে পারেন, যেমন TCP/UDP সাপোর্ট, timers, I/O সাপোর্ট ইত্যাদি।
Tokio-এর সাথে কাজ করা
use tokio::time::{sleep, Duration};
async fn say_hello() {
println!("Hello, world!");
}
async fn main_task() {
say_hello().await;
sleep(Duration::from_secs(1)).await;
println!("After 1 second");
}
#[tokio::main]
async fn main() {
main_task().await;
}এখানে, #[tokio::main] এট্রিবিউট ব্যবহার করা হয়েছে, যা main ফাংশনকে asynchronous করে তোলে। sleep() হল একটি asynchronous টাইমার যা ১ সেকেন্ডের জন্য ব্লক না করে নেক্সট অপারেশন চালাতে সাহায্য করে।
Async-Std লাইব্রেরি
Async-Std লাইব্রেরি একটি asynchronous Rust স্ট্যান্ডার্ড লাইব্রেরি, যা Rust-এ async কোড লেখার জন্য সহায়ক। এটি std লাইব্রেরির মতো API প্রদান করে, তবে asynchronous ফাংশনগুলো সমর্থন করে। Async-Std ইন্টারফেসের দিকে যতটা সম্ভব std লাইব্রেরির মতো থাকতে চেষ্টা করে।
Async-Std ইনস্টল করা
Cargo.toml ফাইলে Async-Std ডিপেন্ডেন্সি যোগ করতে হবে:
[dependencies]
async-std = "1.10"Async-Std-এর সাথে কাজ করা
use async_std::task;
use async_std::prelude::*;
use std::time::Duration;
async fn say_hello() {
println!("Hello, world!");
}
async fn main_task() {
say_hello().await;
task::sleep(Duration::from_secs(1)).await;
println!("After 1 second");
}
fn main() {
task::block_on(main_task());
}এখানে, task::block_on() ব্যবহৃত হয়েছে যাতে asynchronous কোড সিঙ্ক্রোনাসভাবে রান করতে পারে। async_std::task::sleep একইভাবে tokio::sleep এর মতো async স্লিপ অপারেশন হিসাবে কাজ করে।
Tokio এবং Async-Std-এর মধ্যে পার্থক্য
| ফিচার | Tokio | Async-Std |
|---|---|---|
| রানটাইম | পুরোপুরি কাস্টমizable, বড় প্রকল্পের জন্য উপযুক্ত | সাধারণ রানটাইম যা async-std ফাংশন সরবরাহ করে |
| ফিচার সাপোর্ট | অধিক সংখ্যক ফিচার, যেমন TCP/UDP সাপোর্ট, File I/O, timed I/O | কম ফিচার, তবে std লাইব্রেরির মতো API প্রদান করে |
| কার্যকারিতা | বড় স্কেল এবং উচ্চ পারফরম্যান্স অ্যাপ্লিকেশনের জন্য উপযুক্ত | ছোট স্কেল অ্যাপ্লিকেশন এবং সহজ কাজের জন্য উপযুক্ত |
| প্রজেক্টের ব্যাপ্তি | উচ্চ কার্যকারিতা সহ বৃহৎ প্রকল্পের জন্য ব্যবহৃত | ছোট, হালকা প্রকল্পের জন্য উপযুক্ত |
ব্যবহার ক্ষেত্র
- Tokio:
- বড় আকারের, হাই পারফরম্যান্স ওয়েব সার্ভিস বা API গুলি তৈরির জন্য।
asyncI/O বাstreamingডেটা পরিচালনার জন্য।- উচ্চ লোডের সার্ভার নির্মাণে বা পাবলিক ক্লাউড ইন্সটলেশনগুলিতে ব্যবহৃত হয়।
- Async-Std:
- ছোট এবং সাধারণ অ্যাপ্লিকেশনের জন্য উপযুক্ত যেখানে একাধিক concurrency টাস্ক ম্যানেজমেন্ট বা blocking I/O প্রয়োজন নেই।
- ইন্টারেক্টিভ অ্যাপ্লিকেশন এবং স্ক্রিপ্টের জন্য ভালো।
সারাংশ
Tokio এবং Async-Std উভয়ই asynchronous কোড লেখার জন্য Rust-এ ব্যবহৃত হয়, তবে তাদের লক্ষ্য এবং স্কেল ভিন্ন। Tokio বৃহৎ, উচ্চ পারফরম্যান্স অ্যাপ্লিকেশনের জন্য উপযুক্ত, যেখানে Async-Std সাধারণত ছোট এবং সহজ অ্যাপ্লিকেশনের জন্য ব্যবহৃত হয়। দুটি লাইব্রেরি async/await সিঙ্ক্রোনাস স্টাইল ব্যবহারের মাধ্যমে Rust-এ non-blocking প্রোগ্রামিং সমর্থন করে।
Read more