سؤال

تحاول تعلم أسيو، وأنا أتابع الأمثلة من الموقع.

لماذا IO_SERVICE اللازمة وماذا يفعل بالضبط؟ لماذا أحتاج إلى إرسالها إلى كل مهام أخرى تقريبا أثناء إجراء عمليات غير متزامنة، لماذا لا تستطيع "إنشاء" نفسها بعد أول "ملزمة".

هل كانت مفيدة؟

المحلول

آسيو io_service هو الميسر للتشغيل على الوظائف غير المتزامنة. بمجرد أن تكون عملية ASYNC جاهزة، فإنها تستخدم واحدة من io_serviceتركيز المواضيع الخاصة بالاتصال بك مرة أخرى. إذا لم يكن هذا التراخيص، فإنه يستخدم موضوعه الداخلي الخاص به للاتصال بك.

فكر في الأمر كقائمة انتظار تحتوي على عمليات. يضمن لك أن تلك العمليات، عند تشغيل، سوف تفعل ذلك فقط في الخيوط التي تسمى run() أو run_once() الأساليب، أو عند التعامل مع مآخذ ومقابس IO، موضوعها الداخلي.

السبب في أن يجب أن تمر به الجميع أساسا أن شخص ما يجب أن ينتظر عمليات Async جاهزة، كما ذكر في وثائقها الخاصة io_service هل رابط Asio لخدمة I / O لنظام التشغيل، بحيث يتم خلطها من نخيل Async الخاصة بالمنصة، مثل kqueue, /dev/pool/, epoll, وطرق العمل على هؤلاء، مثل select().

في المقام الأول، أعجبني باستخدام IO_SERVICE لاستدعاء Demultiplex من عدة أجزاء من النظام، وتأكد من تشغيلها على نفس الخيط، مما يلغي الحاجة إلى قفل صريح، لأن العمليات تسلسلت. إنه مصطلح قوي جدا للتطبيقات غير المتزامنة.

يمكنك إلقاء نظرة على الوثائق الأساسية للحصول على شعور أفضل لماذا io_service هناك حاجة وماذا يفعل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top