gpt4 book ai didi

android - AIDL "oneway"远程调用的顺序保证是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:21 24 4
gpt4 key购买 nike

用“oneway”关键字标记的AIDL方法和接口(interface)是对远程进程的异步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)"

这似乎表明,对同一接口(interface)的调用保持顺序。

谁能澄清一下?

最佳答案

作为一般规则,单向调用是异步的,可以在不保证顺序的情况下在不同的线程上同时分派(dispatch)。然而,系统对发生在同一 IBinder 对象上的单向调用施加了特殊的顺序保证:在这种情况下,事务将按照原始调用的顺序一次分派(dispatch)一个。请注意,此排序 适用于对同一 IBinder 对象进行单向调用的特定情况。其他任何东西——调用不同的 IBinder 对象或混合单向调用和同步调用——不会为您提供它们之间的任何顺序保证。

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

关于android - AIDL "oneway"远程调用的顺序保证是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20565075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com