سؤال

بعد المناقشة في كيف تستخدم AIO و Epoll معًا في حلقة حدث واحد؟.

هناك في الواقع 2 واجهات برمجة التطبيقات "AIO" في Linux. هناك Posix AIO (عائلة الوظائف AIO_* ، المدرجة في GLIBC و LIBAIO تم تطويرها من قبل Redhat (؟) ، عائلة IO_*.

أول واحد يسمح بتسجيل طلبات الإخطار عبر عضو AIO_SIGEVENT AIOCB. يمكن دمجها بسهولة مع حلقات الأحداث PPOLL ()/PSELECT (). إذا كنت ترغب في دمج posix aio مع epoll () ، فأنت بحاجة إلى ترجمة الإشارة إلى حدث على FD الوهمية (ربما أنبوب) والاستماع إليه مع Epoll ، مع اصطياد الإشارة إما بطريقة كلاسيكية أو مع ppoll/ تحديد. ما مدى أمان الخيار الأول (تنهدات العادية) ، يعتمد على التطبيق. وربما في Epoll لكنني لست على دراية تامة بالمحلات الدولية. هل لي أن أفترض بأمان أنه إذا كان لدي تطبيق يعتمد على EPOLL وأريد إضافة دعم POSIX AIO ، فأنا مشدود؟ كان هذا سؤالي.

يمكن استخدام تطبيق AIO الثاني ، libaio - بالفعل مع EventFD () (struct IOCB له عضو AIO_RESFD من المتوقع أن يكون صفرًا أو حدثًا لتقديم نتائج AIO إلى). لكنه ليس من قبل الكتاب. محدد posix ، وهذا هو.

أحلم بنفسي أن أكون مستخدمًا *BSD حيث يكون كل شيء واضحًا. لديك دعم Posix Aio و Kqueue () لأحداث AIO. اضحة وضوح الشمس. مثل أشياء أخرى كثيرة.

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

المحلول

ملاحظة يمكنك استخدام Posix AIO مع Epoll ، هناك signalfd(2) يقوم بإنشاء واصف ملف يمكنك استخدامه بعد ذلك لإخطار الإشارات في حلقة تعتمد على EPOLL.

وأيضًا من المفترض أن تكون واجهة برمجة تطبيقات AIO الثانية هي ما هو عليه في تنفيذ Posix AIO ، إنه ليس هناك بعد ... (لا أعرف ما إذا كان أي شخص يعمل عليه أيضًا)

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