কোন পর্যায়ে সিঙ্ক্রোনাসের চেয়ে ডিস্ক I / O এর অবিচ্ছিন্ন পড়া আরও দক্ষ?


22

ধরে নিচ্ছি যে কিছু বিট কোড রয়েছে যা একাধিক গ্রাহকের জন্য ফাইলগুলি পড়ে এবং ফাইলগুলি কোনও স্বেচ্ছাসেবী আকারের হয়: কোন আকারে ফাইলটি অবিচ্ছিন্নভাবে পড়তে আরও দক্ষ হয়? অথবা এটি অন্য উপায়ে বলতে গেলে, ফাইলটি কেবলমাত্র সিঙ্ক্রোনালি পড়ার জন্য এটি দ্রুত হওয়া কত ছোট হতে হবে?

আমি লক্ষ্য করেছি (এবং সম্ভবত আমি ভুল) যে খুব ছোট ফাইলগুলি পড়ার সময়, এগুলি সিঙ্ক্রোনালি (বিশেষত। নেট) এর চেয়ে অ্যাসিনক্রোনালি পড়তে বেশি সময় লাগে। আমি ধরে নিচ্ছি যে এটি I / O সমাপ্তি বন্দর, থ্রেড, ইত্যাদির জন্য সময় নির্ধারণের সাথে করতে পারে

এখানে সাহায্য করার জন্য কি কোনও থাম্বের নিয়ম রয়েছে? নাকি এটি সিস্টেম এবং পরিবেশের উপর নির্ভরশীল?


আপনি যে কোডটি বেঞ্চমার্কের জন্য ব্যবহার করেন তা কি আপনি দিতে পারেন? আমি মনে করি যে কেবল ফাইল স্ট্রিমের অভ্যন্তরীণ বাফার আকারের চেয়ে ছোট আকারের ক্ষেত্রেই এটি ঘটতে পারে। তবে আপনাকে যদি খুব ছোট ফাইলগুলি পড়তে হয় তবে আপনি সম্ভবত ডিস্ক আই / ও
মুখোমুখি হবেন

আমার কাছে কোডটি খুব সহজ নয়, আমি ভীত। এটি এমন কিছু যা আমি কিছুক্ষণ আগে ছুটে এসেছি এবং এটি তখন থেকেই আমার মনে on কোড .NET ছিল এবং মূলত সোজা File.ReadAllBytes মধ্যে একটি লুপ জন্য বনাম FileStream.BeginRead () ছিল ()
blesh

যখন বক্ররেখাগুলি তাদের দক্ষতা ক্রসকে উপস্থাপন করে এবং এসিঙ্ক আইও সিঙ্ক আইও বক্ররেখার চেয়ে উচ্চতর মানের হয়ে ক্রসিং থেকে প্রস্থান করে।
থমাস এডিং

উত্তর:


14

দুর্ভাগ্যক্রমে, উত্তরটি হ'ল "এটি নির্ভর করে।" অ্যাসিঙ্ক এবং সিঙ্ক উভয়ের পাঠের সময়টি যথাযথভাবে নির্ধারণ করতে আপনার পক্ষে একটি ছোট প্রোগ্রাম লেখা সহজ হবে।

এটি অনেকগুলি কারণের উপর নির্ভর করবে। সেগুলি স্পিনিং ডিস্ক, এসএসডি, বা কোনও নেটওয়ার্ক ড্রাইভে সঞ্চয় করা আছে? আপনি কোন ধরণের সিপিইউ ব্যবহার করছেন? কত সকেট / কোর? আপনি কি কোনও ভিএম বা খালি ধাতব দ্বারা চালাচ্ছেন? আপনি কি কোনও প্রাচীন ওএস চালাচ্ছেন বা আধুনিক?


1
হ্যাঁ, আমি অনেকটা বুঝতে পেরেছি। আমার ধারণা আমি আশা করছিলাম যে থাম্বের গাইড বা নিয়ম হিসাবে ব্যবহার করার জন্য কোনও ধরণের অধ্যয়ন ছিল।
ব্লেশ

9

অ্যাসিঙ্কের 3 টি প্রধান সুবিধা রয়েছে:

  1. এটি সিপিইউর ব্যবহার হ্রাস করে। আপনি যদি সবেমাত্র পড়েন এমন ডেটা সহ আপনি যদি সিপিইউ-ভারী অপারেশনও করেন তবে এটি কার্যকর হতে পারে।
  2. একরকম অ্যাসিঙ্ক অবকাঠামো ব্যবহার কোডটি প্যারালাইলেস করা সহজ করে তোলে। বিশেষত আপনি যদি প্রচুর ফাইল পড়েন।
  3. ওএসকে একাধিক রিড-রাইটিং অনুরোধ প্রেরণ করে, ওএস এবং এইচডাব্লু এই ক্রিয়াকলাপগুলিকে দ্রুত শেষ করার জন্য পুনরায় অর্ডার করতে পারে। SATA2 এর এমন বৈশিষ্ট্য রয়েছে।

আমি বিশ্বাস করি অ্যাসিঙ্ক্রোনাস রিডের মূল সুবিধাটি যখন আপনি প্রচুর ফাইল নিয়ে কাজ করছেন বা আপনার প্রচুর সিপিইউ পাওয়ার প্রয়োজন হয়।


পয়েন্ট 2 এর জন্য নোট করুন যে I / O অপারেশন যদি বাধা হয়ে থাকে তবে এটি কোনও কিছুরই অনুকূলীকরণ করবে না। আপনি যদি সমান্তরালে, RAID বা নেটওয়ার্কের মাধ্যমে, বিভিন্ন ডিস্কে অবস্থিত ফাইলগুলির মাধ্যমে অ্যাক্সেস করেন তবে জিনিসগুলি আলাদা।
আর্সেনী মরজেনকো

5
হুম, আপনি # 1 দিয়ে কী বোঝাতে চাইছেন তাতে আমার সমস্যা হচ্ছে। আমি বলবো এটি অনুশীলনে অন্যভাবে। Async কেসের সাথে, আপনি এখন আপনার থ্রেড (গুলি) blocked waiting for I/O(0% সিপিইউ) থেকে continue normal processing(> 0% সিপিইউ) তে পরিবর্তন করছেন।
ইসাক সাভো

3

এটা নির্ভর করে

একটি জিনিস মনে রাখতে হবে প্রক্রিয়াগুলির মধ্যে একটি প্রসঙ্গের সুইচটি কত ব্যয়বহুল। নোড.জেএসটি সেভাবে ডিজাইন করা হয়েছে কারণ এটি ধরে নেওয়া হয় যে প্রসঙ্গে একটি সুইচ করা খুব ব্যয়বহুল এবং অন্যথায় আপনি আইই-তে অপেক্ষা করতে অনেক প্রক্রিয়া করতে পারেন যা কম্পিউটারকে ছুঁড়ে ফেলবে।

অন্যদিকে এরলং একটি প্রক্রিয়া প্রসঙ্গে সুইচটিকে খুব সস্তা করে তোলে যাতে সবকিছু সিঙ্ক্রোনাস হতে পারে এবং এরলং রান সময় পুরো জিনিসটি ট্র্যাক করে রাখতে পারে।

সুতরাং বিবেচনা করার কারণগুলি:

  • একটি প্রসঙ্গে সুইচ অপারেশন ব্যয়
  • অপারেশন সন্ধানের জন্য ডিস্কের গতি
  • পড়ার ক্রিয়াকলাপের জন্য ডিস্কের গতি
  • ক্যাশে ফাইল হয়

এবং আমি নিশ্চিত যে আমি আধা ডজন কারণ বাদ দিচ্ছি


2

আমি নিশ্চিত নই যে একটি নির্দিষ্ট "পয়েন্ট" আছে, তবে আপনি যখন অনেকগুলি থ্রেড কাজ করছেন তখন এটি সার্থক হয়, কারণ এটি আপনাকে I / O কে অন্য কাজের সাথে ওভারল্যাপ করতে দেয়। যদি আপনার অতিরিক্ত থ্রেডগুলি অলস হয়ে যায়, তবে অ্যাসিঙ্ক্রোনাসলি পড়া আপনার কোনও সুবিধা দেয় না। এটি কেবলমাত্র যখন আপনার কাজের সারি পূরণ হবে এবং আপনার থ্রেডটি I / O এর অপেক্ষার পরিবর্তে কার্যকরভাবে অন্যান্য কাজ করতে পারে যা অ্যাসিঙ্ক ফাইল অ্যাক্সেস কোনও সুবিধা দেয়।


হ্যাঁ, এটি বহুবিধির পুরো পয়েন্ট!
ভ্লাদ

1

আমি মনে করি যে এখানে সমস্যাটি এতটা পড়ার গতি নয়, কারণ এটি বিলম্ব।

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

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