ইন "UNIX পরিবেশে উন্নত প্রোগ্রামিং" , লে রিচার্ড স্টিভেনস বলেছেন একটি কার্যকারিতা অপ্টিমাইজেশান হল:
আমাদের আগ্রহী সর্বোচ্চ বর্ণনাকারী উল্লেখ করে, কার্নেলটি তিনটি বর্ণনাকারী সেটগুলিতে চালু না হওয়া বিটগুলির সন্ধানে তিনটি অব্যবহৃত বিটের মধ্য দিয়ে যাওয়া এড়াতে পারে।
(প্রথম সংস্করণ, পৃষ্ঠা 399)
আপনি যদি কোনও ধরণের ইউনিক্স সিস্টেম প্রোগ্রামিং করে থাকেন তবে এপিইউ বইটি সুপারিশ করা হয়।
হালনাগাদ
একটি fd_setসাধারণত 1024 ফাইল বিবরণকারী ট্র্যাক করতে সক্ষম হয়।
কোনটি fdsসেট করা আছে 0এবং কোনটি সেট করা আছে তা ট্র্যাক করার সর্বাধিক কার্যকরী উপায় 1বিটসেট হতে পারে, তাই প্রতিটিতে fd_set1024 বিট থাকে।
একটি 32-বিট সিস্টেমে একটি দীর্ঘ ইনট (বা "শব্দ") 32 বিট হয়, যার অর্থ প্রতিটি fd_setহ'ল
1024/32 = 32 শব্দ।
যদি nfds8 বা 16 এর মতো ছোট কিছু হয় তবে এটি এটি অনেক অ্যাপ্লিকেশনগুলিতে হবে তবে কেবলমাত্র 1 ম শব্দের ভিতরে এটি দেখতে হবে যা স্পষ্টতই সমস্ত 32 এর ভিতরে দেখার চেয়ে দ্রুত হওয়া উচিত।
(দেখুন FD_SETSIZEএবং __NFDBITSথেকে /usr/include/sys/select.hআপনার প্ল্যাটফর্মে মানের জন্য।)
আপডেট 2
কেন ফাংশন স্বাক্ষর নয়
int select(fd_set *readfds, int nreadfds,
fd_set *writefds, int nwritefds,
fd_set *exceptfds, int nexceptfds,
struct timeval *timeout);
আমার অনুমান কারণ এটি কোডটি সমস্ত আর্গুমেন্টগুলিকে রেজিস্টারে রাখার চেষ্টা করে , তাই সিপিইউ তাদের উপর দ্রুত কাজ করতে পারে, এবং যদি এটি অতিরিক্ত 2 ভেরিয়েবলগুলি ট্র্যাক করতে হয় তবে সিপিইউতে পর্যাপ্ত রেজিস্টার না থাকতে পারে।
সুতরাং অন্য কথায়, selectএকটি বাস্তবায়ন বিশদটি প্রকাশ করা হচ্ছে যাতে এটি আরও দ্রুত হতে পারে।