খুব অল্প সংখ্যক সকেটের জন্য (অবশ্যই আপনার হার্ডওয়ারের উপর নির্ভর করে পরিবর্তিত হয় তবে আমরা 10 বা তার চেয়ে কম ক্রমের উপর কিছু নিয়ে কথা বলছি), নির্বাচন মেমরির ব্যবহার এবং রানটাইম গতির ক্ষেত্রে এপলকে বীট করতে পারে নির্বাচন করুন। অবশ্যই, এত কম সংখ্যক সকেটের জন্য, উভয় প্রক্রিয়াই এত দ্রুত যে আপনি বেশিরভাগ ক্ষেত্রেই এই পার্থক্যটির বিষয়ে সত্যই চিন্তা করেন না।
যদিও একটি ব্যাখ্যা। উভয়ই নির্বাচন করুন এবং এপল স্কেল রৈখিকভাবে। তবে একটি বড় পার্থক্য হ'ল ইউজারস্পেস-ফেসিং এপিআইগুলির জটিলতা রয়েছে যা বিভিন্ন জিনিসের উপর ভিত্তি করে। select
কলটির ব্যয় আপনি সর্বাধিক সংখ্যাযুক্ত ফাইল বর্ণনাকারীর মান সহ মোটামুটিভাবে চলে যায়। আপনি যদি একক এফডি, ১০০ বাছাই করেন, তবে এটি কোনও একক এফডি বাছাইয়ের চেয়ে দ্বিগুণ ব্যয়বহুল। 50. সর্বোচ্চের নিচে আরও fd যোগ করা নিখরচায় নয়, সুতরাং এটি অনুশীলনের চেয়ে কিছুটা জটিল but বেশিরভাগ বাস্তবায়নের জন্য একটি ভাল প্রথম অনুমান।
এপলটির ব্যয় ফাইল বর্ণনাকারীর সংখ্যার কাছাকাছি যেগুলিতে আসলে ইভেন্ট থাকে। যদি আপনি 200 ফাইল বর্ণনাকারী নিরীক্ষণ করেন তবে তাদের মধ্যে 100 টির মধ্যেই ইভেন্ট রয়েছে তবে আপনি (খুব মোটামুটিভাবে) কেবলমাত্র এই 100 টি সক্রিয় ফাইল বর্ণনাকারীর জন্য অর্থ প্রদান করছেন। এপলটি সিলেক্টের চেয়ে তার বড় সুবিধাগুলির মধ্যে একটি প্রস্তাব দেয়। আপনার যদি এমন এক হাজার ক্লায়েন্ট থাকে যা বেশিরভাগই অলস থাকে, তবে আপনি যখন নির্বাচন নির্বাচন করেন আপনি এখনও তাদের এক হাজারের জন্য অর্থ প্রদান করছেন। যাইহোক, এপোল সহ, এটি কেবলমাত্র কয়েকটি পেয়েছে - আপনি কেবলমাত্র যে কোনও সময় সক্রিয় থাকা ব্যক্তির জন্য অর্থ প্রদান করছেন।
এই সমস্তটির অর্থ হল যে এপল বেশিরভাগ কাজের চাপের জন্য কম সিপিইউ ব্যবহারের দিকে নিয়ে যাবে। মেমরির ব্যবহার যতদূর যায়, এটি কিছুটা টস আপ। select
একটি অত্যন্ত কমপ্যাক্ট উপায়ে (ফাইল বিস্তৃত প্রতি এক বিট) সমস্ত প্রয়োজনীয় তথ্য উপস্থাপন পরিচালনা করে। এবং আপনি কতগুলি ফাইল বর্ণনাকারী ব্যবহার করতে পারবেন তার FD_SETSIZE (সাধারণত 1024) সীমাবদ্ধতা এর select
অর্থ এই যে আপনি যে তিনটি এফডি সেট ব্যবহার করতে পারবেন তার জন্য 128 বাইটের বেশি কখনই ব্যয় করবেন না thatselect
(পড়ুন, লিখুন, ব্যতিক্রম)। সেই 384 বাইট সর্বাধিকের সাথে তুলনা করে, এপোলটি শুকরের মতো। প্রতিটি ফাইল বর্ণনাকারী একটি বহু-বাইট গঠন দ্বারা প্রতিনিধিত্ব করা হয়। তবে, নিখুঁত শর্তে, এটি এখনও খুব বেশি স্মৃতি ব্যবহার করে না। আপনি কয়েক ডজন কিলোবাইট (প্রায় 1000 কে প্রতি ফাইলের বর্ণনাকারী 20k,) মনে করে বিপুল সংখ্যক ফাইল বর্ণনাকারী উপস্থাপন করতে পারেন। এবং আপনি এই সত্যটিও ফেলে দিতে পারেন যে আপনি select
কেবলমাত্র একটি ফাইল বর্ণনাকারী নিরীক্ষণ করতে চান তবে আপনাকে সেই বাইটগুলির সমস্ত 384 ব্যয় করতে হবে তবে এর মান 1024 হবে, এপল সহ আপনি কেবল 20 বাইট ব্যয় করতে পারবেন। তবুও, এই সমস্ত সংখ্যা বেশ ছোট, তাই এটি খুব বেশি পার্থক্য করে না।
এবং এপলের অন্যান্য সুবিধাগুলি রয়েছে, যা আপনি সম্ভবত ইতিমধ্যে অবগত আছেন যে এটি FD_SETSIZE ফাইল বর্ণনাকারীর মধ্যে সীমাবদ্ধ নয়। আপনার যতগুলি ফাইল ডেস্ক্রিপ্টার রয়েছে তা পর্যবেক্ষণ করতে আপনি এটি ব্যবহার করতে পারেন। এবং যদি আপনার কাছে কেবল একটি ফাইল বর্ণনাকারী থাকে তবে এর মান এফডি_এসটিএসআইআইএসের চেয়ে বেশি হয়, এপলটিও এটির সাথে কাজ করে, তবে select
তা হয় না।
এলোমেলোভাবে, আমি সম্প্রতি বা এর epoll
তুলনায় একটি সামান্য ত্রুটিও আবিষ্কার করেছি । যদিও এই তিনটি এপিআই-এর কোনওটিই সাধারণ ফাইলগুলিকে সমর্থন করে না (যেমন একটি ফাইল সিস্টেমে ফাইলগুলি), এবং এই বর্ণনাকারীদের প্রতিবেদন হিসাবে সর্বদা পঠনযোগ্য এবং সর্বদা লিখনযোগ্য হিসাবে এই সমর্থনটির অভাব উপস্থাপন করে। এটি তাদেরকে কোনও অর্থবোধক ধরণের অ-ব্লক করা ফাইল সিস্টেম I / O এর জন্য অনুপযুক্ত করে তোলে, এমন একটি প্রোগ্রাম যা ফাইল সিস্টেম থেকে কোনও ফাইল বর্ণনাকারীর মুখোমুখি হয় বা ঘটে এবং কমপক্ষে কাজ করা চালিয়ে যাবে (বা যদি এটি ব্যর্থ হয়, তবে তা হবে না) এর বা ), এটা যদিও সম্ভবত সেরা পারফরম্যান্স সাথে নয়।select
poll
select
poll
select
poll
select
poll
অন্যদিকে, কোনও ফাইল বর্ণনাকারী নিরীক্ষণ করতে বলা হলে epoll
ত্রুটি ( EPERM
সম্ভবত স্পষ্টভাবে) দিয়ে দ্রুত ব্যর্থ হবে । কঠোরভাবে বলতে গেলে, এটি খুব কমই ভুল। এটি কেবল একটি সুস্পষ্ট উপায়ে এর সমর্থন অভাব ইঙ্গিত দিচ্ছে। সাধারণত আমি সুস্পষ্ট ব্যর্থতার শর্তগুলির প্রশংসা করব, তবে এইটি একটি অনির্ধারিত (যতদূর আমি বলতে পারি) এবং ফলস্বরূপ সম্পূর্ণরূপে ভাঙা অ্যাপ্লিকেশনটির ফলস্বরূপ, যা কেবল সম্ভাব্য অবনমিত কার্য সম্পাদন করে ope
অনুশীলনে, স্টিডিওর সাথে ইন্টারঅ্যাক্ট করার সময় আমি কেবল এটিই দেখেছি। কোনও ব্যবহারকারী স্ট্যান্ডিন বা স্টডআউটকে একটি সাধারণ ফাইল থেকে / পুনর্নির্দেশ করতে পারে। যদিও পূর্বে স্টিডিন এবং স্টাডাউট একটি পাইপ হত - এপল দ্বারা ঠিক সূক্ষ্মভাবে সমর্থিত - এটি তখন একটি সাধারণ ফাইল হয়ে যায় এবং অ্যাপলটি জোরে জোরে ব্যর্থ হয়, অ্যাপ্লিকেশনটি ভেঙে দেয়।
poll
সম্পূর্ণতার আচরণ সম্পর্কে স্পষ্ট হওয়া বিবেচনা করুন ?