Android Binder - Как несколько процессов синхронизируются при чтении / записи? - PullRequest
0 голосов
/ 26 мая 2018

Мне было интересно, как Binder работает внутренне, когда речь идет об одновременном обслуживании нескольких процессов.

Я пытался пройтись по коду водителя , но это было немного сложно.Однако, если я не ошибаюсь, я видел, что код включает в себя некоторые блокировки при выполнении транзакций, но не совсем уверен, что объем этих блокировок.

Как вы знаете, служба Binder включает в себя пул потоков (из16 потоков), что повышает параллелизм для одновременного обслуживания нескольких процессов.Мое замешательство приходит сюда.Если сам драйвер связывателя использует какую-то глобальную блокировку для сериализации доступа, как вся структура связывателя может использовать этот пул потоков?

Единственный правильный ответ, который приходит мне в голову, это то, что связыватель может использовать некоторые «гранулярные» блокировки, а затем освободить его, чтобы вещи (потоки) доходили до пула потоков на стороне службы.

Я могу быть полностью или частично неправ в этом.Любая помощь будет очень высоко ценится.

PS: Если блокировка похожа на «гранулярную», то как глобальный буфер чтения / записи (если есть) защищен от возможных множественных операций чтения / записи, поступающих от нескольких процессов.Или эти буферы в стеке потоков (так защищены природой)?

...