тестирую работу mutex.withLock банально прогоняя кусочек кода прямо из документации у себя на машинке (1 скрин). Судя по доке mutex не должен блокировать тред, от этого казалось бы, что в многопотоке такой механизм должен отрабатывать быстрее стандартного synchronized. Но на практике я вижу совсем обратное - mutex на стандартном кейсе из доки отрабатывает +- в 10 раз медленнее чем synchronized и к тому же, на 3 скриншоте можно заметить, что завершение всех операций упирается в один конкретный тред, с synchronized такого не происходит (2 скрин). Подскажите, пожалуйста, мб я неверно понимаю механизмы работы мьютекса и здесь все хорошо и дефолтная синхронизация должна работать быстрее? Код брал полностью из доки, меняя только константы. Тестирую на последней стабильной версии библиотеки корутин
Там вроде дальше расказывается, что это не совсем правильно, таким образом увеличивать счетчик. Это лишь пример. 2-е я уверен, в massiveRun там создается очень много корутин, и наверное расказывается, что невозможно создать такое же количество jvm-тредов не схватив oom.
3-е: используя синхронизацию внутри корутин можно словить дедлок. (в случае если внутри блока синхронизации будет suspend-point)
Конкретно у меня здесь создается 50 корутин с Default диспетчером, сами треды я не создаю в целом, меня просто пугает тот факт, что на финише mutex в 1 конкретный тред упирается при том, что synchronized кажется работает корректнее и оптимальнее, не совсем понимаю почему так происходит
кажется это все объясняет
ну и synchronized может работать быстрее засчет того, что он использует специальный битик в объектах на жвм, а мьютекс это чисто логика.
в любом случае, в корутинах надо использовать mutex и не париться, в рабочих примерах эта разница не будет критичной
ну пока тесты лично мне обратное говорят( т.к думаю на практике будет весьма проблемно использовать mutex и следить за тем, чтобы внутри withLock не вызывался suspend-point, соответственно велик шанс ловить дедлоки. И учитывая тот факт, что с synchronized такого не будет, какие бенифиты я могу получить с импользования mutex?
эмм, моё сообщение было о synchronized. внутри него нельзя делать suspend-point
Обсуждают сегодня