প্রস্তুতি বনাম সমাপ্তি অ্যাসিঙ্ক আইও মেমোরির ব্যবহার?


12

আমি জংয়ে অ্যাসিঙ্ক আইও বাস্তবায়নের বিষয়ে এই আলোচনাটি দেখছিলাম এবং কার্ল দুটি সম্ভাব্য মডেলের উল্লেখ করেছেন। প্রস্তুতি এবং সমাপ্তি।

প্রস্তুতি মডেল:

  • আপনি সকেট থেকে যে কার্নেলটি পড়তে চান তা বলুন
  • কিছুক্ষণের জন্য অন্য কিছু করুন ...
  • সকেট প্রস্তুত হলে কার্নেল আপনাকে জানায়
  • আপনি পড়ুন (একটি বাফার পূরণ করুন)
  • আপনার যা প্রয়োজন তা করুন
  • বাফার মুক্ত করুন (মরিচা দিয়ে স্বয়ংক্রিয়ভাবে ঘটে)

সমাপ্তি মডেল:

  • আপনি কার্নেলটি পূরণ করতে বাফার বরাদ্দ করেন
  • কিছুক্ষণের জন্য অন্য কিছু করুন ...
  • বাফারটি কখন পূরণ করা হবে তা কার্নেলটি আপনাকে বলে
  • আপনার ডেটা দিয়ে যা প্রয়োজন তা করুন
  • বাফার মুক্ত করুন

কার্লের প্রস্তুতি মডেলটি ব্যবহারের উদাহরণে আপনি প্রস্তুত বিশ্বস্ত বাফারকে পূরণ এবং মুক্ত করার জন্য প্রস্তুত সকেটের উপরে পুনরাবৃত্তি করতে পারেন যা দেখে মনে হয় এটি অনেক কম স্মৃতি ব্যবহার করবে ।

এখন আমার অনুমান:

হুডের নীচে (কার্নেল স্পেসে) যখন কোনও সকেটকে "প্রস্তুত" বলা হয়, ডেটা ইতিমধ্যে বিদ্যমান exists এটি নেটওয়ার্কের (বা যে কোনও জায়গা থেকে) সকেটে এসে গেছে এবং ওএস ডেটা ধরে রেখেছে।

এটি মনে হয় না যে সেই স্মৃতি বরাদ্দ যাদুকরীভাবে প্রস্তুতি মডেলটিতে ঘটে না। এটি কেবলমাত্র ওএস আপনাকে এড়িয়ে চলেছে। সমাপ্তি মডেলটিতে, ওএস আপনাকে আসলে ডেটা প্রবাহিত হওয়ার আগে এবং মেমরিটি বরাদ্দ করতে বলছে এবং যা ঘটছে তা স্পষ্ট।

রেডিনিয়াস মডেলের আমার সংশোধিত সংস্করণটি এখানে:

  • আপনি সকেট থেকে যে কার্নেলটি পড়তে চান তা বলুন
  • কিছুক্ষণের জন্য অন্য কিছু করুন ...
  • সংশোধন: ওএসে ডেটা আসে (কার্নেলের স্মৃতিতে কিছু জায়গা)
  • কার্নেল আপনাকে জানায় সকেট প্রস্তুত
  • আপনি পড়ুন (অ্যাওভার কার্নেল বাফার থেকে আলাদা করে অন্য একটি বাফার পূরণ করুন (অথবা আপনি এটির জন্য একটি পয়েন্টার পান?))
  • আপনার যা প্রয়োজন তা করুন
  • বাফার মুক্ত করুন (মরিচা দিয়ে স্বয়ংক্রিয়ভাবে ঘটে)

/ আমার অনুমান

আমি ব্যবহারকারীর স্পেস প্রোগ্রামটি ছোট রাখার মতোই হয়েছি তবে আমি এখানে যা ঘটছে তা বাস্তবে কী তা নিয়ে কিছু স্পষ্টতা চেয়েছিলাম। আমি দেখতে পাচ্ছি না যে একটি মডেল অন্তর্নিহিতভাবে কম মেমরি ব্যবহার করবে বা উচ্চতর স্তরের যুগ্ম IO সমর্থন করবে। আমি এই সম্পর্কে চিন্তা এবং গভীর ব্যাখ্যা শুনতে পছন্দ করি।


আমি সেই ইউটিউব আলাপ থেকে এখানে পৌঁছেছি। যেহেতু অ্যাসিঙ্ক আইও বা ইভেন্ট লুপগুলি বাস্তবায়ন করতে হয় সে সম্পর্কে যে কেউ শিখতে পারে, জাস্ট টিমটির "আইসএনসি সাক্ষাত্কারগুলি" এর এই প্লেলিস্টটি এখানে সম্প্রদায়ের খুব জ্ঞানী লোকদের সাক্ষাত্কারে রয়েছে
ক্যাকোডার

উত্তর:


5

রেডিনিয়াস মডেলটিতে মেমরির ব্যবহারটি অ্যাপ্লিকেশন দ্বারা আনসন করা ডেটার পরিমাণের সাথে সমানুপাতিক।

সমাপ্তির মডেলটিতে মেমরির খরচটি সকেট কলগুলির পরিমাণের সাথে সমানুপাতিক।

যদি এমন অনেকগুলি সকেট থাকে যা বেশিরভাগই নিষ্ক্রিয় থাকে তবে রেডিনিয়াস মডেল কম স্মৃতি গ্রহণ করে।

সম্পূর্ণ মডেলটির জন্য একটি সহজ ফিক্স রয়েছে: 1 বাইটের একটি পঠন শুরু করুন। এটি কেবল একটি ক্ষুদ্র বাফার গ্রহণ করে। যখন পঠনটি ইস্যুটি সম্পূর্ণ করে অন্য কোনও (সম্ভবত সিঙ্ক্রোনাস) পড়াটি বাকী ডেটা পান।

কিছু ভাষায় কমপ্লিট মডেলটি প্রয়োগ করা অত্যন্ত সহজ। আমি এটি একটি ভাল ডিফল্ট পছন্দ হিসাবে বিবেচনা।


1

সমাপ্তি মডেলটিতে, ওএস আপনাকে আসলে ডেটা প্রবাহিত হওয়ার আগে এবং মেমরিটি বরাদ্দ করতে বলছে এবং যা ঘটছে তা স্পষ্ট।

তবে আপনার জন্য স্থান বরাদ্দের চেয়ে আরও বেশি ডেটা যদি আসে? ডেটা ফেলে না দেওয়ার জন্য কার্নেলটিকে এখনও তার নিজের বাফার বরাদ্দ করতে হবে। (উদাহরণস্বরূপ, এর কারণেই উসরের উত্তরে উল্লিখিত 1 বাইট পড়ার কৌশল কাজ করে))

ট্রেডঅফটি হ'ল কমপ্লেশন মডেলটি বেশি মেমরি গ্রাস করে, এটি (কখনও কখনও) কম কপি অপারেশনও করতে পারে, কারণ বাফারকে চারপাশে রাখার অর্থ হার্ডওয়্যারটি সরাসরি এটির বাইরে বা এর মধ্যে ডিএমএ করতে পারে। আমি সন্দেহও করি (তবে কম নিশ্চিত) যে কমপ্লিট মডেলটি অন্য কোনও থ্রেডে প্রকৃত অনুলিপি অপারেশন (যখন এটি উপস্থিত রয়েছে) করতে চায়, অন্তত উইন্ডোজ আইওসিপি-র জন্য, যখন রেডিনিস মডেল এটি অ-ব্লক করার অংশ হিসাবে করে read()বা write()কল করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.