উদ্বোধন ও মুক্তির মধ্যে পার্থক্য কী?


96

উভয় 2 টি libs async i / o সময়সূচী জন্য ডিজাইন করা হয়েছে, এবং উভয়ই লিনাক্স এপল জড়িত, এবং ফ্রিবিএসডি উপর Kueue, ইত্যাদি।

মাত্রাতিরিক্ত পার্থক্য বাদে, আমার অর্থ এই দুটি গ্রন্থাগারের মধ্যে সত্য পার্থক্য কী? স্থাপত্য সম্পর্কিত, বা দর্শনের নকশার বিষয়ে?



4
লিভেন্ট উইন্ডোজের জন্য আইওসিপি সমর্থন করে (বাফেরেন্ট এএফআইকে মাধ্যমে) যে লিভভ দেয় না
রজারডপ্যাক

4
রোজারডপ্যাক, লিবুভ আইওসিপি github.com/joyent/libuv সমর্থন করে
ডেনিস

উত্তর:


223

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

লিবিভ গ্লোবাল ভেরিয়েবল ব্যবহার না করে সমস্ত ক্রিয়াকলাপের জন্য একটি লুপ প্রসঙ্গ ব্যবহার করে, প্রতিটি ইভেন্টের ধরণের জন্য ছোট পর্যবেক্ষক ব্যবহার করে (একটি আই / ও নজরদারি x86_64 এ 56 মুক্তির জন্য 136 এর তুলনায় 56 বাইট ব্যবহার করে) প্রতিটি উন্নত করার চেষ্টা করেছেন ইভেন্টের ধরণের যেমন টাইমারের উপর ভিত্তি করে টাইমারগুলি বনাম একঘেয়ে সময়, আন্ত-থ্রেড বিঘ্ন, অন্যান্য ইভেন্টের লুপগুলি এম্বেড করতে বা এম্বেড করা এবং ততক্ষণে নজরদারিগুলি প্রস্তুত এবং পরীক্ষা করে।

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

সুতরাং সংক্ষেপে, লিভভ কেবল একটি জিনিস করার চেষ্টা করে (পসিক্স ইভেন্ট লাইব্রেরি), এবং এটি সবচেয়ে কার্যকর উপায়ে সম্ভব। লিবিভেন্ট আপনাকে সম্পূর্ণ সমাধান দেওয়ার চেষ্টা করে (ইভেন্ট লাইব, নন-ব্লকিং I / O গ্রন্থাগার, HT সার্ভার, ডিএনএস ক্লায়েন্ট)।

অথবা, আরও কম সংক্ষেপে, ইউনিভার্স ইউনিক্স টুলবক্সের দর্শনের অনুসরণ করার চেষ্টা করে কেবল একটি কাজ করার জন্য, যতটা সম্ভব সম্ভব।

মনে রাখবেন এটি হ'ল নকশা দর্শন, যা আমি কর্তৃপক্ষের সাথে বলতে পারি কারণ আমি ডিজাইভকে ডিজাইন করেছি। এই নকশাগুলির লক্ষ্যগুলি আসলে পৌঁছেছে কিনা, বা দর্শনটি সঠিক নীতিগুলির ভিত্তিতে কিনা তা বিচার করার জন্য আপনার উপর নির্ভর করে।

আপডেট 2017:

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

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

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

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

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


আপনি কি লিওবিওর লেখক?
জুয়ানপাভেরগড়া

দুর্ভাগ্যক্রমে, এটি সরানো এবং libuv দ্বারা প্রতিস্থাপন করা হয়েছিল: github.com/joyent/libuv/issues/485 এবং এটি: groups.google.com/forum/#!topic/nodejs/UwHkaOksprw
পিটার

4
আমি লিভাভকে একটি ভাল সংযোজন করেছি যাকে বলা হয় লিব্বা ফাইবার, এটি লিভারভ, লিবকোরো এবং লিবিওর উপরে একটি ফাইবার স্তর যুক্ত করে। এখানে পাওয়া যাবে: github.com/Lupus/libevfibers
লুপাস

4
libevউইন্ডোজ প্ল্যাটফর্মে বেদনাদায়ক। MinGW সংকলক সর্বদা ++activecnt(ফাংশন ev_ref) সিগফল্ট করে এবং কীভাবে এই সমস্যাটি সমাধান করবেন তা আমি বুঝতে পারি না। দ্বিতীয় সমস্যাটি হ'ল পুরানো selectসকেট ইন্টারফেস সহ সকেট আন্তঃযোগের আধুনিক আইওসিপি সংস্করণ। আপনি উইডনোস সমর্থন উন্নত করতে পারেন?
ভিটল্ড এস

4
বলার জন্য দুঃখিত, তবে লিব্বের পিছনে আরও একটি "দর্শন" রয়েছে বলে মনে হচ্ছে, যা অনেকগুলি মুক্ত উত্স প্রকল্পকে ভেঙে দিয়েছে। উদাহরণস্বরূপ list.schmorp.de/pipermail/libev/2017q1/002710.html বা list.schmorp.de/pipermail/libev/2010q1/000912.html তে উদাহরণস্বরূপ । সম্ভাব্য ব্যবহারকারীদের সম্ভবত এটিও বিবেচনা করা উচিত।
dbrank0

13

আমার পক্ষে মুক্তির দুর্দান্ত সুবিধা হ'ল বিল্ট-ইন ওপেনএসএসএল সমর্থন। বাভেরেন্ট ইন্টারফেস, লভেন্ট এপিআইয়ের ২.০ সংস্করণে প্রবর্তিত , বিকাশকারীদের জন্য প্রায় বেদাহীনভাবে সুরক্ষিত সংযোগগুলি পরিচালনা করে। হতে পারে আমার জ্ঞানটি পুরানো হয়ে গেছে তবে মনে হচ্ছে লেভভ এটি সমর্থন করে না।


4
সঠিক: লিভভ আপনার জন্য আমি / ও করি না, এবং সুতরাং আপনার জন্য টিএলএস করে না (বা আসলে কোনও আই / ও)।
মনিকা মনে রাখবেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.