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