I / O দক্ষতার সাথে সকেট করা কিউইউ, এপল, আইও সমাপ্তি বন্দর এবং পছন্দগুলি দিয়ে সমাধান করা হয়েছে। অ্যাসিঙ্ক্রোনাস ফাইল আই / ও করা একটি দেরী আগত লোকের ধরণ (উইন্ডোজগুলি ওভারল্যাপ করা I / O এবং পলিক্স এআইওর জন্য সোলারিস প্রাথমিক সমর্থন) বাদ দিয়ে।
আপনি যদি সকেট আই / ও করার সন্ধান করছেন তবে উপরের যেকোন একটি পদ্ধতি ব্যবহার করে আপনি সম্ভবত ভাল।
এআইওর মূল উদ্দেশ্য হ'ল অ্যাসিনক্রোনাস ডিস্ক আই / ও এর সমস্যা সমাধান করা। সম্ভবত ম্যাক ওএস এক্স কেবলমাত্র নিয়মিত ফাইলগুলির জন্য এআইও সমর্থন করে, এবং সকেট নয় (যেহেতু কোকুই যেভাবে এত ভাল করে)।
লেখার ক্রিয়াকলাপগুলি সাধারণত কার্নেল দ্বারা ক্যাশে হয় এবং পরবর্তী সময়ে তা বেরিয়ে আসে। উদাহরণস্বরূপ, যখন ড্রাইভের পঠন প্রধানটি যেখানে ব্লকটি লিখতে হবে সেখান দিয়ে চলে যায়।
যাইহোক, পাঠ্য ক্রিয়াকলাপগুলির জন্য, আপনি যদি কার্নেলটিকে নিজের পাঠকে অগ্রাধিকার এবং অর্ডার করতে চান তবে এআইও সত্যই একমাত্র বিকল্প। এখানে কার্নাল (তাত্ত্বিকভাবে) যে কোনও ব্যবহারকারীর স্তরের অ্যাপ্লিকেশনটির চেয়ে ভাল করতে পারে তা এখানে রয়েছে:
- কার্নেলটি কেবলমাত্র আপনার অ্যাপ্লিকেশনগুলির ডিস্ক কাজ নয়, সমস্ত ডিস্ক আই / ও দেখতে পাবে এবং তাদের বিশ্বব্যাপী অর্ডার করতে পারে
- কার্নেল (সম্ভবত) ডিস্কটি পড়ার মাথাটি কোথায় তা জানতে পারে এবং মাথাটি সবচেয়ে কম দূরত্বকে সরাতে, আপনি অনুকূল ক্রমে এটিতে যে পাঠানো কাজগুলি বেছে নিতে পারেন তা চয়ন করতে পারে
- আপনার পড়ার ক্রিয়াকলাপগুলি আরও উন্নত করতে কার্নেল স্থানীয় কমান্ড কুইংয়ের সুবিধা নিতে পারে
- আপনি রিডভ () এর চেয়ে লিও_লিস্টিও () ব্যবহার করে সিস্টেম কল প্রতি আরও পঠিত ক্রিয়াকলাপ জারি করতে সক্ষম হতে পারেন, বিশেষত যদি আপনার পাঠাগুলি (যুক্তিযুক্তভাবে) সামঞ্জস্যপূর্ণ না হয় তবে সিস্টেম কল ওভারহেডের একটি ছোট্ট বিট সংরক্ষণ করে।
- আপনার প্রোগ্রামটি এআইওর সাথে সামান্য সহজ হতে পারে যেহেতু আপনার পড়া বা লেখার কলটিতে ব্লক করার জন্য কোনও অতিরিক্ত থ্রেডের প্রয়োজন নেই।
এটি বলেছিল, পিক্সস এআইওর একটি বেশ বিশ্রী ইন্টারফেস রয়েছে, উদাহরণস্বরূপ:
- ইভেন্ট কলব্যাকগুলির একমাত্র দক্ষ এবং ভাল সমর্থিত মাধ্যমগুলি সিগন্যালের মাধ্যমে, যা একটি লাইব্রেরিতে ব্যবহার করা কঠিন করে তোলে, কারণ এর অর্থ প্রক্রিয়া-বৈশ্বিক সংকেত নেমস্পেস থেকে সংকেত সংখ্যা ব্যবহার করা। যদি আপনার ওএস রিয়েলটাইম সংকেতগুলি সমর্থন করে না, তবে এর অর্থ হ'ল কোনটি শেষ হয়েছে তা নির্ধারণ করার জন্য আপনার সমস্ত অসামান্য অনুরোধের মধ্য দিয়ে লুপ করতে হবে (এটি ম্যাক ওএস এক্সের ক্ষেত্রে, লিনাক্স নয়)। বহু-থ্রেডযুক্ত পরিবেশে সংকেতগুলি ধরা কিছু জটিল বাধাও দেয়। আপনি সাধারণত সিগন্যাল হ্যান্ডলারের ভিতরে থাকা ইভেন্টটিতে প্রতিক্রিয়া জানাতে পারেন না, তবে আপনাকে একটি সিগন্যাল বাড়াতে হবে, একটি পাইপে লিখতে হবে বা সিগন্যালফডি () (লিনাক্সে) ব্যবহার করতে হবে।
- লিও_সপাসেন্ড () সিলেক্ট () এর মতো একই সমস্যা রয়েছে, এটি কাজের সংখ্যার সাথে খুব ভাল স্কেল করে না।
- লিও_লিস্টিও () বাস্তবায়িত হওয়ার সাথে সাথে আপনি যে পরিমাণ কাজ সীমাবদ্ধ করতে পারবেন তা যথেষ্ট পরিমাণে সীমাবদ্ধ রয়েছে এবং পোর্টেবল উপায়ে এই সীমাটি খুঁজে পাওয়া তুচ্ছ নয়। আপনাকে সিসকনফকে কল করতে হবে (_SC_AIO_LISTIO_MAX), যা ব্যর্থ হতে পারে, আপনি যদি এআইআই_লিস্টিও_ম্যাক্স সংজ্ঞায়িত করতে পারেন, যা প্রয়োজনীয়ভাবে সংজ্ঞায়িত হয় না তবে আপনি 2 ব্যবহার করতে পারেন, যা সমর্থিত হওয়ার গ্যারান্টিযুক্ত হিসাবে সংজ্ঞায়িত হয়েছে।
সত্যিকারের বিশ্বের অ্যাপ্লিকেশন যেমন পিক্স এআইও ব্যবহার করে আপনি লাইটটিপিডি (হালকা) দেখে নিতে পারেন, যা সমর্থন প্রবর্তনের সময় একটি পারফরম্যান্স পরিমাপ পোস্ট করেছিল ।
বেশিরভাগ পোস্টিক্স প্ল্যাটফর্মগুলি এআইওকে এখনই পিক্সিকে সমর্থন করে (লিনাক্স, বিএসডি, সোলারিস, এআইএক্স, ট্রু 64)। উইন্ডোজ এটির ওভারল্যাপযুক্ত ফাইল আই / ও এর মাধ্যমে সমর্থন করে। আমার উপলব্ধি হ'ল কেবল সোলারিস, উইন্ডোজ এবং লিনাক্স সত্যই অ্যাসিঙ্ক সমর্থন করে। I / O ফাইলটি চালকের কাছে সমস্ত পথেই ফাইল করুন, অন্য অপারেশনগুলি এসিঙ্কটি অনুকরণ করে। কার্নেল থ্রেড সহ I / O। লিনাক্স ব্যতিক্রম, গ্লোব্যাকটিতে এটির পিসিক্স এআইও প্রয়োগকারী ব্যবহারকারীর স্তরের থ্রেডগুলির সাথে অ্যাসিঙ্ক অপারেশনগুলি অনুকরণ করে, যেখানে তার নেটিভ অ্যাসিঙ্ক আই / ও ইন্টারফেস (io_submit () ইত্যাদি) ড্রাইভারের কাছে নিচে নেমে আসার পরে সত্যই অ্যাসিনক্রোনাস হয়, ।
আমি বিশ্বাস করি যে কোনও এফডির জন্য পিক্সস এআইও সমর্থন না করা ওএসের মধ্যে মোটামুটি সাধারণ, তবে এটি নিয়মিত ফাইলগুলিতে সীমাবদ্ধ।