নকশার দর্শনের ক্ষেত্রে, মুক্তির কিছু স্থাপত্য সিদ্ধান্তের উন্নতির জন্য মুক্তির তৈরি করা হয়েছিল, উদাহরণস্বরূপ, বিশ্বব্যাপী পরিবর্তনশীল ব্যবহারের ফলে বহুবিধ পরিবেশে নিরাপদে লিভেন্ট ব্যবহার করা শক্ত হয়ে যায়, প্রহরী কাঠামো বড় কারণ তারা আই / ও, সময় এবং সংকেতকে একত্রিত করে একটিকে হ্যান্ডলারগুলি, যেমন HTTP এবং dns সার্ভারগুলির মতো অতিরিক্ত উপাদানগুলি খারাপ প্রয়োগের গুণমান এবং ফলস্বরূপ সুরক্ষার সমস্যাগুলির দ্বারা ভুগেছে, এবং টাইমারগুলি নিখুঁত ছিল এবং সময় সাঁতারের সাথে ভালভাবে মোকাবেলা করে না।
লিবিভ গ্লোবাল ভেরিয়েবল ব্যবহার না করে সমস্ত ক্রিয়াকলাপের জন্য একটি লুপ প্রসঙ্গ ব্যবহার করে, প্রতিটি ইভেন্টের ধরণের জন্য ছোট পর্যবেক্ষক ব্যবহার করে (একটি আই / ও নজরদারি x86_64 এ 56 মুক্তির জন্য 136 এর তুলনায় 56 বাইট ব্যবহার করে) প্রতিটি উন্নত করার চেষ্টা করেছেন ইভেন্টের ধরণের যেমন টাইমারের উপর ভিত্তি করে টাইমারগুলি বনাম একঘেয়ে সময়, আন্ত-থ্রেড বিঘ্ন, অন্যান্য ইভেন্টের লুপগুলি এম্বেড করতে বা এম্বেড করা এবং ততক্ষণে নজরদারিগুলি প্রস্তুত এবং পরীক্ষা করে।
অতিরিক্ত উপাদানগুলির সমস্যাটি একেবারেই না পেয়েই "সমাধান" করা যায়, সুতরাং লিবভ ছোট এবং দক্ষ হতে পারে তবে আপনাকে একটি অন্য কোনও লাইব্রেরি লাইব্রেরির জন্যও দেখতে হবে, কারণ লিবভের কেবল একটি নেই (উদাহরণস্বরূপ, সেখানে একটি রয়েছে) লিবিও নামে পরিচিত খুব লাইব্রেরি যা অ্যাসিঙ্ক্রোনাস আই / ও করে, যা স্বতন্ত্রভাবে বা লিব্বের সাথে একসাথে ব্যবহার করা যায়, যাতে আপনি মিশ্রণ করতে পারেন এবং মিলিয়ে নিতে পারেন)।
সুতরাং সংক্ষেপে, লিভভ কেবল একটি জিনিস করার চেষ্টা করে (পসিক্স ইভেন্ট লাইব্রেরি), এবং এটি সবচেয়ে কার্যকর উপায়ে সম্ভব। লিবিভেন্ট আপনাকে সম্পূর্ণ সমাধান দেওয়ার চেষ্টা করে (ইভেন্ট লাইব, নন-ব্লকিং I / O গ্রন্থাগার, HT সার্ভার, ডিএনএস ক্লায়েন্ট)।
অথবা, আরও কম সংক্ষেপে, ইউনিভার্স ইউনিক্স টুলবক্সের দর্শনের অনুসরণ করার চেষ্টা করে কেবল একটি কাজ করার জন্য, যতটা সম্ভব সম্ভব।
মনে রাখবেন এটি হ'ল নকশা দর্শন, যা আমি কর্তৃপক্ষের সাথে বলতে পারি কারণ আমি ডিজাইভকে ডিজাইন করেছি। এই নকশাগুলির লক্ষ্যগুলি আসলে পৌঁছেছে কিনা, বা দর্শনটি সঠিক নীতিগুলির ভিত্তিতে কিনা তা বিচার করার জন্য আপনার উপর নির্ভর করে।
আপডেট 2017:
আমাকে একাধিকবার জিজ্ঞাসা করা হয়েছিল যে আমি টাইমার অক্ষমতার বিষয়ে উল্লেখ করি এবং কেন ইউনিভার্স উইন্ডোজগুলিতে আইওসিপিগুলিকে সমর্থন করে না।
টাইমার হিসাবে, মুক্তির সময়সূচী টাইমারদের কিছু অজানা বেস টাইম সম্পর্কিত যা ভবিষ্যতে, আপনার অজান্তেই। লিবিভ আপনাকে টাইমারের সময়সূচী নির্ধারণের জন্য কোন বেস সময় ব্যবহার করবে তা আগাম জানিয়ে দিতে পারে, যা প্রোগ্রামগুলিকে মুক্তিকামী পদ্ধতি এবং উদ্বোধন পদ্ধতির উভয়ই ব্যবহার করতে দেয়। তদ্ব্যতীত, উদ্রেকনের সময় ব্যাকএন্ডের উপর নির্ভর করে কখনও কখনও টাইমারগুলির মেয়াদ শেষ হয়ে যায়। পূর্ববর্তীটি একটি এপিআই ইস্যু, দ্বিতীয়টি স্থিরযোগ্য (এবং সম্ভবত এটি স্থির করা হয়েছে - আমি চেক করি নি)।
আইওসিপি সমর্থন হিসাবে - আমি মনে করি না এটি করা সম্ভব, কারণ আইওসিপিগুলি কেবল যথেষ্ট শক্তিশালী নয়। একটি জিনিসের জন্য, তাদের একটি বিশেষ সকেট প্রকারের প্রয়োজন, যা উইন্ডোগুলিতে অনুমোদিত হ্যান্ডলগুলির সেটকে আরও বেশি সীমাবদ্ধ করে তুলবে (উদাহরণস্বরূপ, পার্ল দ্বারা ব্যবহৃত সপকেটগুলি আইওসিপিগুলির জন্য "ভুল" টাইপের)। তদ্ব্যতীত, আইওসিপিগুলি কেবল আই / ও প্রস্তুতি ইভেন্টগুলিকে মোটেই সমর্থন করে না, তারা কেবল প্রকৃত I / O করতে পারে। কিছু হ্যান্ডেল ধরণের জন্য ওয়ার্কআরউন্ডস রয়েছে যেমন ডামি 0-বাইট রিড করা, তবে আবার এটি আপনার উইন্ডোতে আরও বেশি ব্যবহার করতে পারবেন এমন হ্যান্ডেল ধরণের সীমাবদ্ধ করবে এবং তদুপরি, অনাবন্ধিত আচরণের উপর নির্ভর করবে যা সম্ভবত সমস্ত সকেট সরবরাহকারীদের দ্বারা ভাগ করা হয়নি likely ।
আমার জানা মতে, অন্য কোনও ইভেন্ট লাইব্রেরি উইন্ডোতে আইওসিপিগুলি সমর্থন করে না। লিভেন্ট কী করে তা ইভেন্ট লাইব্রেরির পাশাপাশি এটি আপনাকে পঠন / লেখার ক্রিয়াকলাপ সজ্জিত করতে দেয় যা আইওসিপিগুলির মাধ্যমে করা যেতে পারে। যেহেতু লিবভ আপনার জন্য আই / ও করে না, সেহেতু লিব্বে আইওসিপি ব্যবহার করার কোনও উপায় নেই।
এটি প্রকৃতপক্ষে ডিজাইনের মাধ্যমে - লিবভটি ছোট এবং পসিক্সের মতো হওয়ার চেষ্টা করে এবং উইন্ডোজগুলিতে পসিক্স-স্টাইল আই / ও ইভেন্টগুলি পাওয়ার সহজ উপায় নেই। যদি আইওসিপিগুলি গুরুত্বপূর্ণ হয় তবে আপনাকে সেগুলি নিজেই ব্যবহার করতে হবে, বা সত্যিকার অর্থে এমন অনেকগুলি ফ্রেমওয়ার্ক ব্যবহার করতে হবে যা আপনার জন্য I / O করে এবং তাই IOCPs ব্যবহার করতে পারে।