#java #performance #concurrency #multicore #atomic
#java #Производительность #параллелизм #многоядерный #атомарная
Вопрос:
Я пробовал какой-то бенчмарк над этими двумя (программная транзакционная память и атомарная операция, я предполагаю, что оба не совпадают), хотя я мало что сделал с использованием STM (это кажется сложным в использовании), но я успешно попытался подсчитать бенчмарк, т. е. все потоки увеличивают общий счетчик в 50 миллионов раз, и заметил, что атомарная операция работает лучше, чем STM.
Итак, я хочу знать, поскольку STM не полностью разработаны, хорошо ли они работают в реальной ситуации, чем атомарная операция?
Кто-то переключился на другой из-за производительности? пожалуйста, поделитесь информацией..
соответствующий журнал, который я нашел в Интернете, называется Параллельное программирование без блокировок
P.S. Я использую JAVA в качестве языка программирования. STM: — многострочный. AtomicOperatinn: AtomicInteger.
Комментарии:
1. У них разное назначение — я бы не стал выбирать одно из другого в зависимости от производительности.
2. Если вы увеличили счетчик только в 50 миллионов раз, это не займет много времени. Я бы запускал тест не менее 2-5 секунд.
3. Если вы досчитаете до 250 миллионов, это может занять 5 секунд. Примечание: оптимальное количество потоков для подсчета равно 1, что может привести к некоторым нечетным результатам. Я предлагаю вам попробовать тест, который выполняется быстрее, когда вы используете больше потоков.
4. @peter хорошо:) но протестируйте, например, какую операцию над списком ссылок / хэш-картой ? @johan спасибо 🙂
5. создайте тест, основанный на том, как вы собираетесь его использовать. Вы можете обнаружить, что STM работает медленнее, но разница настолько незначительна, что не имеет значения. Или вы можете обнаружить, что это имеет большое значение для реалистичного примера.
Ответ №1:
Атомарные операции и STM — это очень разные устройства. В частности, атомарные операции представляют собой конструкции гораздо «более низкого уровня» — фактически, атомарные операции различных видов обычно используются для реализации STM. В основном:
- Атомарная операция позволяет выполнить безопасное для параллелизма обновление одного объекта. Это просто и быстро, обычно это всего лишь одна инструкция на современном оборудовании.
- STM позволяет выполнять безопасное для параллелизма обновление нескольких объектов. Это сложно.
Поэтому системам STM необходимо добавить дополнительные накладные расходы на ведение бухгалтерского учета для управления сложностью транзакционного обновления — поэтому, если вам нужно обновить только один объект, атомарная операция почти всегда будет быстрее.
Кроме того, вы должны знать, что нет единого мнения о наилучшем способе проектирования систем STM — это активная тема исследований, и в ней есть много компромиссов. Итак, то, что хорошо работает в одной системе STM, может плохо работать в другой системе STM и т.д.
Например: моей любимой системой STM на данный момент является Clojure — она особенно привлекательна, потому что поддерживает управление параллелизмом нескольких версий и никогда не мешает читателям, что дает значительное преимущество в производительности во многих распространенных сценариях.
Комментарии:
1. @mikrea отлично .. сделал мой день … спасибо .. 🙂 … Есть ли у вас какой-либо блог / общедоступный контент по поводу проделанной вами работы? ..
2. На данный момент у меня нет ничего общедоступного (запуск в скрытом режиме!), Но если вы заинтересованы в этой теме, я настоятельно рекомендую следующее видео: infoq.com/presentations/Value-Identity-State-Rich-Hickey или любую из замечательных онлайн-статей о STM от Clojure. Вы также можете просмотреть мои ответы на StackOverflow для различных примеров….