মূল বিষয়বস্তুতে যান

ব্লগ

Rust Async ব্লকিং, Rayon এবং আধুনিক অ্যাপ্লিকেশন

অ্যাসিঙ্ক Rust-এ "ব্লকিং" মানে কী, যখন Rayon CPU-বাউন্ড কাজকে ফিট করে এবং কেন Rust APIs, প্রান্ত, এজেন্ট এবং CI/CD প্ল্যাটফর্মের জন্য শক্তিশালী থাকে

  • Balinder Walia
  • 3 মিনিটে পড়া
  • Updated

TenthMatrixকেন আধুনিক অ্যাপ্লিকেশনগুলির জন্য Rust একটি প্রথম-শ্রেণির পছন্দ থাকে — এবং যখন আপনি CPU-ভারী কাজের সাথে Tokio মিশ্রিত করেন তখন "ব্লকিং" এর অর্থ কী৷ Alice Ryhl এরAsync দ্বারা অনুপ্রাণিত: ব্লকিং কি?(Rayon বিভাগ)। গভীর ডুব:দীর্ঘ নিবন্ধ।

Rust async blocking and Rayon for modern applications

নীচের লাইন।async Rust-এ, "ব্লক করা" মানে একজন রানটাইম কর্মীকে.awaitথেকে দূরে রাখা যাতে অন্যান্য কাজগুলি অনাহারে থাকে৷ Tokio এর পুল থেকে ব্যয়বহুল CPU কাজটি সরিয়ে দিন — প্রায়ইRayonপ্লাস একটি oneshot চ্যানেলের সাথে — এবং API, প্রান্ত প্রক্সি, এজেন্ট এবং CI/CD কন্ট্রোল প্লেনের জন্য অ্যাসিঙ্ক পাথকে প্রতিক্রিয়াশীল রাখুন।

কেন Rust আধুনিক অ্যাপ্লিকেশন স্লট

জিতে চলেছে৷

টিম Rust বাছাই করে যখন তাদের GC পজ ট্যাক্স, লোডের অধীনে অনুমানযোগ্য লেটেন্সি এবং টাইপ সিস্টেম আপনাকে সঠিক হতে সাহায্য করে এমন কনকারেন্সি ছাড়াই মেমরি নিরাপত্তার প্রয়োজন হয়। সেই সংমিশ্রণটি যেখানে TenthMatrix তৈরি করে সেখানে দেখা যায়: উচ্চ-থ্রুপুট APIs, প্রান্ত গেটওয়ে, এজেন্ট রানটাইম, এবং প্রচার নিয়ন্ত্রণ প্লেন যা CPU কাজের একটি স্পাইক আসার সময় স্থির হতে পারে না।

এটি "সবকিছুর জন্য Rust" নয়৷ আমাদেরPolyglot Benchmarksড্যাশবোর্ড এবং সহচর পোস্টগুলি —ব্লগ/নিবন্ধ— Rust-এর সাথে Go, Bun, JVM স্ট্যাক, এবং একই HTTP ওয়ার্কলোডগুলিতে স্ক্রিপ্টিং প্রান্তের তুলনা করুন৷ Rust প্রায়ই CPU-বাউন্ড এবং কনকারেন্সি-ভারী সারিগুলিতে নেতৃত্ব দেয়; অন্যান্য রানটাইম বেগ বা প্রান্ত রূপান্তর উপর জয়. বিন্দু প্রমাণ, তারপর ADRs.

অ্যাসিঙ্ক Rust

-এ "ব্লকিং" বলতে কী বোঝায়

Async রানটাইম (Tokio এবং বন্ধুদের).awaitপয়েন্টে কাজগুলি অদলবদল করুন৷ যদি আপনার টাস্ক CPU এর মিলিসেকেন্ড বার্ন করে বা অপেক্ষা না করেstd::thread::sleepএর সাথে ঘুমায়, কর্মী সেই থ্রেডে অন্য কাউকে শিডিউল করতে পারবে না। স্থানীয়ভাবে আপনি লক্ষ্য করবেন না (কয়েকটি কোর বাগ লুকিয়ে রাখে); উৎপাদনে আপনার কর্মী ফুরিয়ে যায় এবং লেটেন্সি লেজ বিস্ফোরিত হয়।

ইকোসিস্টেম থেকে

নিয়ম: লেটেন্সি-সংবেদনশীল পরিষেবাগুলির জন্য অপেক্ষার মধ্যে দশ থেকে কয়েকশো মাইক্রোসেকেন্ডের মধ্যে থাকুন — এবং যে কোনও কাজকে অন্য কোথাও কাজ বলে মনে করুন৷

যখন Rayon সাহায্য করে (CPU-বাউন্ড)

  • spawn_blocking— Tokio এর ব্লকিং পুল: সিঙ্ক আইও (ফাইলসিস্টেম, ডিবি ড্রাইভার ব্লক করা) এর জন্য দুর্দান্ত; ভারী CPU-এর জন্য সাবঅপ্টিমাল কারণ এটি কোর ওভারসাবস্ক্রাইব করতে পারে।
  • Rayon— সমান্তরাল পুনরাবৃত্তি এবং ব্যয়বহুল গণনার জন্য একটি ছোট, CPU-আকারের থ্রেড পুল।rayon::spawn+tokio::sync::oneshotএর সাথে ব্রিজ যাতে অ্যাসিঙ্ক টাস্কটি রানটাইম থ্রেড ব্লক না করে ফলাফলের জন্য অপেক্ষা করে।
  • ডেডিকেটেড থ্রেড— চিরকালের লুপগুলির জন্য (সংযোগ পরিচালক, দীর্ঘজীবী কর্মী) যেগুলি স্থায়ীভাবে পুল ক্ষমতা ব্যবহার করবে না৷

সেই Rayon + oneshot প্যাটার্নটিRayon বিভাগে-এ Alice Ryhl ঠিক যা দিয়ে চলে — Workstation-এর ধারণা হল কীভাবে এই পছন্দগুলি পলিগ্লট এস্টেট শিপিং এজেন্ট এবং প্ল্যাটফর্মগুলিতে আসে, টিউটোরিয়ালের পুনর্মুদ্রণ নয়।

যেখানে এটি TenthMatrix পণ্যগুলিতে প্রদর্শিত হয়

৷
  • APIs এবং প্রান্ত— অনুরোধ কর্মীদের IO-এর জন্য বিনামূল্যে রাখুন; ফ্যান CPU Rayon-এ রূপান্তরিত হয় যখন একটি গরম পথের প্রয়োজন হয়।
  • এজেন্ট— এমবেডিং প্রিপ, ইভাল ব্যাচ, এবং টুল-সাইড ক্রাঞ্চ অর্কেস্ট্রেশন লুপ স্টল করা উচিত নয়।
  • CI/CD প্ল্যাটফর্মগুলি— স্বাস্থ্য পরীক্ষা এবং প্রচার ইঞ্জিনগুলি (Ring Promoterদেখুন) প্রতিক্রিয়াশীল থাকে যখন ভারী যাচাইকরণের কাজ অফ-পুলে চলে৷
  • Kubernetes ops—KubePilot-এর মতো ঘটনার সহ-পাইলটগুলির বিশ্লেষণ CPU-ভারী হলেও স্ন্যাপী কন্ট্রোল লুপের প্রয়োজন৷

পরবর্তী

পড়ুন
  1. দীর্ঘ নিবন্ধ— চিট শীট, কোড-আকৃতির নিদর্শন এবং আর্কিটেকচার নোট৷
  2. polyglot-benchmarks.fictionally.org— লাইভ Rust বনাম সমকক্ষ প্রমাণ।
  3. Alice Ryhl —অ্যাসিঙ্ক: ব্লকিং কি?

TenthMatrixদ্বারা প্রকাশিত।