سؤال

كتبت تطبيقًا متزامنًا واشتعلت الخطأ:

BuildFdsets: واصف ملف خارج النطاق

اكتشفت أن هذا هو الحد الأقصى لنظام التشغيل لعدد واصفات الملفات في عملية واحدة ، في بلدي FreeBsd أنه 1024. إنه حد select(). كما تعلمت أن هناك نهجا آخر: kqueue().

أسئلتي هي:

  • كيف تربح الحد على واصفات الملف؟
  • كيف تستعمل kqueue() بدلاً من select() في برامج هاسكل؟
هل كانت مفيدة؟

المحلول

أعتقد أن GHC 7 الآن لديه دعم لاستخدام Kqueue () في نهايته الخلفية:

رابط إلى الورق, منشور مدونة وصفي

ومع ذلك ، فإن منصة هاسكل لم تخرج بعد لـ GHC 7.

نصائح أخرى

يمكنك ببساطة الترقية إلى GHC 7 ، وهو جزء من منصة هاسكل, ، أيّ يشمل:

على منصات POSIX ، يوجد مدير I/O جديد يعتمد على EPOLL/KQUEUE/استطلاع ، والذي يتيح رمز الإدخال/الإخراج المتعدد مؤشرات الترابط لتوسيع نطاق أكبر بكثير (100K+) من مؤشرات الترابط

خاصه:

من الناحية المعمارية ، يتكون مدير I/O الجديد من مكونين. توفر مكتبة الحدث الخاصة بنا واجهة برمجة تطبيقات نظيفة ومحمولة ، وتجريد الآليات على مستوى النظام المستخدمة لتوفير ملاحظات حدثية (Kqueue ، Epoll ، و Poll). لقد كتبنا أيضًا Shim الذي يقوم بتنفيذ واجهات ThreadWaitRead شبه الحكومية و threadwaitwrite. هذا يعني أنه لا تتطلب المكتبات الأساسية أو المكتبات الشبكية ، ولا مكتبات I/O الأخرى ذات المستوى المنخفض ، أي تغييرات للعمل معها-وتستفيد من تحسينات الأداء الخاصة بالرمز الجديد.

هذا هو ، مجرد الترقية ، والأشياء تعمل بشكل أفضل.

إليك بعض مواد القراءة:

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