android–AIDL“单程”远程呼叫的订购保证是什么?

android–AIDL“单程”远程呼叫的订购保证是什么?,第1张

概述标有“oneway”关键字的AIDL方法和接口是远程进程的异步Binder调用,并且据说不保证调用的顺序.另一方面,DianneHackborn(Binder的作者)的最后评论(https://groups.google.com/forum/#!topic/android-developers/FFY-hg2Jx0M)说:“orderingofdeliveryistiedtothetargeto

标有“oneway”关键字的AIDL方法和接口是远程进程的异步Binder调用,并且据说不保证调用的顺序.另一方面,Dianne Hackborn(Binder的作者)的最后评论(
https://groups.google.com/forum/#!topic/android-developers/FFY-hg2Jx0M)说:

“ordering of delivery is tIEd to the target object (so you can receive calls on different
interfaces out of order)”

这似乎暗示,调用相同的接口保持他们的顺序.

任何人都可以澄清这个吗?

解决方法:

作为一般规则,单向调用是异步的,并且可以在不同的线程上同时调度而没有排序保证.但是,系统对在同一IBinder对象上发生的单向调用强制执行特殊排序保证:在这种情况下,将按原始调用的顺序一次调度一个事务.请注意,此排序仅适用于在同一IBinder对象上单向调用的特定情况.其他任何东西 – 调用不同的IBinder对象或单向混合和同步调用 – 都不会给你任何订单保证.

这项工作的方式是在内核中每个IBinder对象都有一个单向事务队列来分派.单向呼叫会添加到该队列(非单向呼叫会绕过队列).当每个先前的事务完成时,一次一个地从一个队列中调度事务.因此,您可能会看到这些调用在不同的线程上调度,但系统确保一次只执行一个调用. (同样只针对单个IBinder对象,单向调用两个不同的IBinder对象可以同时执行.)

总结

以上是内存溢出为你收集整理的android – AIDL“单程”远程呼叫的订购保证是什么?全部内容,希望文章能够帮你解决android – AIDL“单程”远程呼叫的订购保证是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1116601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存