io_service، لماذا وكيف يتم استخدامه؟
-
23-08-2019 - |
سؤال
تحاول تعلم أسيو، وأنا أتابع الأمثلة من الموقع.
لماذا 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
هناك حاجة وماذا يفعل.