سؤال

وHELP PLEASE! لدي تطبيق يحتاج أقرب إلى المعالجة في الوقت الحقيقي ممكن، وأظل على التوالي في هذه المسألة تأخير غير عادية مع كل من TCP و UDP. يحدث تأخير تصورها وهو دائما نفس طول الوقت (ومعظمهم من 15-16 مللي ثانية). ويحدث ذلك عندما نقل إلى أي جهاز (عشية المحلية) وعلى أي شبكة (لدينا اثنين).

وسريع الجري من المشكلة:

وأنا دائما باستخدام WINSOCK في C ++، وقد تم تجميعها في VS 2008 برو، ولكن كنت قد كتبت عدة برامج لإرسال واستقبال بطرق مختلفة باستخدام كل من TCP و UDP. أنا دائما استخدام برنامج وسيط (تشغيل محليا أو عن بعد) مكتوبة بلغات مختلفة (MATLAB، C #، C ++) أن تحيل المعلومات من برنامج واحد إلى آخر. تشغيل كلا البرنامجين Winsock على نفس الجهاز حتى يتمكنوا عرض الطوابع الزمنية لالإرسال والاستقبال من نفس مدار الساعة. وأظل نشهد نمطا تظهر فيها وابلا من الحزم سوف تحصل على نقلها ومن ثم لا يكون هناك تأخير لحوالي 15-16 ميلي ثانية قبل انفجار المقبل على الرغم من عدم وجود تأخير يجري المبرمجة في بعض الأحيان قد يكون من 15-16 مللي ثانية بين كل علبة بدلا من موجة من الحزم. وفي أحيان أخرى (نادرا) وسوف يكون تأخير طول مختلف، مثل ~ 47 مللي ثانية. يبدو لي دائما لاستقبال الحزم مرة أخرى ضمن ميلي ثانية واحدة منهم بثها ولكن مع نفس النمط من تأخير يجري عرضها بين رشقات نارية المرسلة.

ولدي شكوك أن WINSOCK أو NIC هو الحزم التخزين المؤقت قبل نقل كل ولكن لم أجد أي دليل على ذلك. لدي اتصال جيجابت لشبكة واحدة أن يحصل على مستويات مختلفة من المرور، ولكن أنا أيضا واجهت نفس الشيء عند تشغيل برنامج وسيط على الكتلة التي لديها شبكة خاصة مع عدم وجود حركة المرور (من المستخدمين على الأقل) واتصال 2 جيجابت. حتى أنا سوف تواجه هذا التأخير عند تشغيل البرنامج وسيطة محليا مع ارسال واستقبال البرامج.

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

المحلول

وأنا أحسب المشكلة هذا الصباح حين إعادة كتابة الملقم في جاوة. قرار بلدي على مدار الساعة نظام ويندوز هو ما بين 15 و 16 ميلي ثانية. وهذا يعني أن كل حزمة التي يظهر نفس ميلي ثانية واحدة من الوقت الإرسال لها هو في الواقع إرسالها في ميلي ثانية مختلفة في فترة 16 ميلي ثانية واحدة، ولكن لي الطوابع فقط فسيزيد كل 15 إلى 16 ميلي ثانية بحيث تظهر نفسها.

وجئت هنا للرد على سؤالي ورأيت رد حول رفع أولوية برنامجي. لذلك بدأت جميع البرامج الثلاثة، وذهب إلى مدير المهام، أثار كل ثلاث إلى "الوقت الحقيقي" الأولوية (التي كانت هناك عملية أخرى في) وركض لهم. حصلت على نفس 15-16 فترات ميلي ثانية واحدة.

وشكرا لردود بالرغم من ذلك.

نصائح أخرى

وهناك دائما التخزين المؤقت المعنية وأنه يختلف بين الأجهزة / سائقين / نظام التشغيل وما إلى ذلك المنظمون حزمة أيضا أن تلعب دورا كبيرا.

إذا كنت تريد ضمانات "من الصعب في الوقت الحقيقي"، ربما يجب عليك البقاء بعيدا عن ويندوز ...

وماذا كنت على الارجح رؤية هو تأخير جدولة - طلبك ينتظر عملية أخرى (ق) لإنهاء timeslice والتخلي عن وحدة المعالجة المركزية. timeslices القياسية على المعالجات ويندوز هي من 15ms إلى 180ms.

هل يمكن أن تحاول رفع الأولوية في التطبيق الخاص بك / الموضوع.

وأوه نعم، أنا أعرف ماذا تقصد. النوافذ والمخازن المؤقتة الخاصة به ... محاولة تعديل قيم SO_SNDBUF على المرسل وSO_RCVBUF على جانب المتلقي. أيضا، تحقق الأجهزة المشاركة الشبكات (الموجهات والمحولات والبوابات وسائل الاعلام) - القضاء على أكبر عدد ممكن بين الآلات لتجنب الكمون

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