سلسلة محادثات النموذج

ولا يتم حظر الطرق التي تم وضع علامة oneway عليها. بالنسبة إلى الطرق التي لم يتم وضع علامة عليها باعتبارها oneway، وهو طريقة يعتمدها العميل لحظر المكالمات إلى أن يصبح الخادم إكمال التنفيذ أو طلب معاودة الاتصال المتزامنة (أيهما يحدث أولاً). يمكن لعمليات تنفيذ طريقة الخادم استدعاء استدعاء متزامن واحد على الأكثر؛ إضافية ويتم تجاهل استدعاءات معاودة الاتصال وتسجيلها كأخطاء. إذا كان من المفترض أن إرجاع القيم عبر معاودة الاتصال ولا يستدعي معاودة الاتصال، فهذا يتم تسجيله كـ وتم الإبلاغ عنه كخطأ في النقل إلى العميل.

سلاسل المحادثات في وضع العبور

وفي وضع العبور، تكون معظم المكالمات متزامنة. ومع ذلك، للحفاظ على هو السلوك المقصود الذي لا تحظره خدمة oneway العميل، يتم إنشاء مؤشر ترابط لكل عملية. للحصول على التفاصيل، يمكنك مراجعة نظرة عامة على HIDL

سلاسل الرسائل في HALs المجمَّعة

لخدمة مكالمات استدعاء إجراء عن بُعد (RPC) الواردة (بما في ذلك عمليات الاستدعاء غير المتزامنة من HALs إلى) لمستخدمي HAL) وإشعارات الوفاة، يتم ربط سلسلة محادثات بكل عملية. التي تستخدم HIDL. إذا نفذت عملية واحدة واجهات HIDL متعددة و/أو معالِجات إشعارات الوفاة، تتم مشاركة سلسلة المحادثات الخاصة بها بين جميع هذه الأجهزة. فعندما أي عملية تتلقى استدعاء طريقة واردة من أحد العملاء، واختيار سلسلة محادثات مجانية من سلسلة المحادثات وينفذ الاستدعاء في سلسلة المحادثات هذه. إذا لم تكن هناك سلسلة محادثات مجانية متاحة، فإنها تمنع حتى توفر واحدة.

أما إذا كان الخادم لا يحتوي إلا على سلسلة محادثات واحدة، فستكتمل الاتصالات الواردة إلى الخادم. بالترتيب. قد يُكمل خادم يحتوي على أكثر من سلسلة محادثات واحدة الطلبات بدون ترتيب. حتى لو كان العميل لديه سلسلة محادثات واحدة فقط. ولكن، بالنسبة لكائن واجهة معيّنة، ضمان طلب oneway مكالمة (راجع نموذج سلسلة محادثات الخادم). بالنسبة إلى الخادم متعدد السلاسل يستضيف واجهات متعددة، oneway من استدعاءات واجهات مختلفة قد تتم معالجتها بالتزامن مع بعضها البعض أو غيرها من المكالمات المحظورة.

يتم إرسال المكالمات المتعددة المتداخلة على سلسلة hwbinder نفسها. على سبيل المثال: إذا قامت العملية (A) بإجراء استدعاء متزامن من سلسلة تعليمات hwbinder إلى المعالجة (B)، ثم تُعيد العملية (B) الاتصال المتزامن إلى العملية (A)، يتم تنفيذه على سلسلة تعليمات hwbinder الأصلية في (A) والذي تم حظره على النطاق الأصلي الاتصال. ويتيح هذا التحسين إمكانية الحصول على خادم واحد متسلسل قادر على التعامل مع المكالمات المتداخلة، لكنه لا يمتد إلى الحالات التي تنتقل فيها المكالمات سلسلة أخرى من استدعاءات IPC. فعلى سبيل المثال، إذا قدمت العملية (ب) استدعاء binder/vndbinder الذي استدعى عملية (C) ثم يعالج (C) مرة أخرى إلى (A)، فلا يمكن عرضه على سلسلة التعليمات الأصلية في (A).

نموذج سلسلة محادثات الخادم

باستثناء وضع العبور، تسري عمليات تنفيذ الخادم لواجهات HIDL. في عملية مختلفة عن العميل وتحتاج إلى سلسلة محادثات واحدة أو أكثر في انتظار مكالمات طريقة واردة. سلاسل المحادثات هذه هي سلسلة محادثات الخادم؛ يمكن للخادم لتحديد عدد سلاسل المحادثات التي ترغب في تشغيلها في مجموعة سلاسل المحادثات لديها، ويمكنك استخدام فيما يتعلق بسلسلة المحادثات بحجم واحد لتسلسل جميع الاتصالات على واجهاته. إذا كان الخادم تضم أكثر من سلسلة محادثات واحدة في سلسلة المحادثات هذه، فيمكنها تلقّي الطلبات الواردة على أي من واجهاتها (في لغة C++، وهذا يعني أن البيانات المشتركة يجب مقفلة بعناية).

يتم تسلسل المكالمات الأحادية الاتجاه إلى الواجهة نفسها. إذا كان الجدول الزمني متعدد السلاسل يستدعي العميل method1 وmethod2 على الواجهة. IFoo وmethod3 في الواجهة IBar، يتم دائمًا عرض method1 وmethod2 بشكل تسلسلي، ولكن يمكن أن يعمل method3 بالتوازي مع method1 و method2

يمكن أن تؤدي سلسلة العميل الواحد التنفيذ إلى تنفيذ متزامن على خادم مع عدة سلاسل محادثات بطريقتين:

  • لا يتم حظر مكالمتَين (oneway). إذا كانت مكالمة oneway تم تنفيذه ثم يتم استدعاء دالة غير oneway، يمكن للخادم تنفيذ المكالمة oneway والمكالمة التي لا تتبع oneway في الوقت نفسه.
  • يمكن إزالة حظر طرق الخادم التي تعيد توجيه البيانات باستخدام عمليات معاودة الاتصال المتزامنة العميل فور استدعاء الاتصال من الخادم.

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

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

بالإضافة إلى عمليات الاستدعاء المتزامنة، تجري oneway مكالمات من يمكن التعامل مع برنامج يتضمن سلسلة محادثات واحدة بشكل متزامن من خلال خادم يضم عدة خوادم سلاسل المحادثات في مجموعة سلاسل المحادثات، ولكن فقط إذا كانت طلبات "oneway" هذه تنفيذها على واجهات مختلفة. مكالمتان (oneway) على الرقم نفسه واجهة تسلسلية دائمًا.

ملاحظة: ننصح بشدة بوظائف الخادم بمجرد استدعاء دالة الاستدعاء.

على سبيل المثال (في C++):

Return<void> someMethod(someMethod_cb _cb) {
    // Do some processing, then call callback with return data
    hidl_vec<uint32_t> vec = ...
    _cb(vec);
    // At this point, the client's callback is called,
    // and the client resumes execution.
    ...
    return Void(); // is basically a no-op
};

نموذج سلاسل محادثات العميل

اختلاف نموذج سلاسل المحادثات للعميل بين الاستدعاءات التي لا تحظر المحتوى (الدوال التي تم تمييزها بالكلمة الرئيسية oneway) وحظرها الاستدعاءات (الدوال التي لا تحتوي على الكلمة الرئيسية oneway المحددة).

حظر المكالمات

بالنسبة إلى حظر المكالمات، يحظر العميل حتى يحدث أي مما يلي:

  • حدث خطأ في النقل؛ يحتوي الكائن Return على خطأ. الحالة التي يمكن استردادها باستخدام Return::isOk().
  • يستدعي تنفيذ الخادم معاودة الاتصال (إذا كان هناك واحد).
  • يعرض تنفيذ الخادم قيمة (إذا لم تكن هناك مَعلمة معاودة الاتصال).

وفي حالة النجاح، تكون دالة الاستدعاء التي يمر بها العميل كوسيطة يتم استدعاؤه دائمًا بواسطة الخادم قبل عرض الدالة نفسها. رد الاتصال هو يتم تنفيذها على نفس سلسلة المحادثات التي يتم إجراء استدعاء الدالة عليها، لذا فإن عمليات التنفيذ توخي الحذر أثناء تثبيت الأقفال أثناء استدعاء الدوال (وتجنبها تمامًا عندما يكون ذلك ممكنًا). دالة بدون عبارة generates أو أنّ هناك كلمة رئيسية oneway لا تزال محظورة العميل حتى يعرض الخادم الكائن Return<void>.

المكالمات الأحادية الاتجاه

عند وضع علامة oneway على دالة، يعود العميل فورًا ولا ينتظر أن يكمل الخادم استدعاء الوظيفة. في جلسة المعمل، سطح (وكليًا)، هذا يعني أن استدعاء الدالة يأخذ نصف لأنه يتم تنفيذ نصف التعليمات البرمجية، ولكن عند كتابة عمليات تنفيذ حساسة للأداء، لذلك بعض الآثار على الجدولة. في العادة، فإن استخدام اتصال أحادي الاتجاه يؤدي إلى استمرار جدولة المتصل بينما فإن استخدام اتصال متزامن عادي يؤدي إلى نقل أداة الجدولة على الفور من المتصل إلى الشخص الذي يتم طلبه. هذا هو تحسين الأداء في مجلد. بالنسبة إلى الخدمات التي يجب فيها تنفيذ الاتصال الأحادي الجانب في العملية المستهدفة ذات أولوية عالية، يمكن تغيير سياسة الجدولة لخدمة الاستلام بتغييره. في لغة C++، باستخدام طريقة libhidltransport setMinSchedulerPolicy باستخدام أولويات أداة الجدولة والسياسات محدد في sched.h يضمن تشغيل جميع الاتصالات في الخدمة على الأقل في سياسة الجدولة والأولوية المحددة.