|
|
|
lock contention
|
|||
|---|---|---|---|
|
#18+
На такой термин как lock contention http://www.javacodegeeks.com/2014/11/multithreading-concurrency-interview-questions-answers.html What do we understand by lock contention? Lock contention occurs, when two or more threads are competing in the acquisition of a lock. The scheduler has to decide whether it lets the thread, which has to wait sleeping and performs a context switch to let another thread occupy the CPU, or if letting the waiting thread busy-waiting is more efficient. Both ways introduce idle time to the inferior thread. Не могу нормально перевести этот текст, чтоб стало понятно. Помогите пожалуйста. P.S. гугл знает только как избежать lock contention. Что это такое я не понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2015, 16:26 |
|
||
|
lock contention
|
|||
|---|---|---|---|
|
#18+
questioner, Существует такое понятие как "критический ресурс" в данном случае lock. Обладать этим ресурсом может только 1 поток. Когда два потока хотят обладать этим ресурсом, то между ними возникает тот самый contention . В результате один поток получает ресурс, а другой нет. Вот тот поток, который не получил ресурс, ему надо что-то делать. В простейшем случае ему надо приостановить свою работу и освободить CPU для других задач. Contention это плохо для высоконагруженных систем, потому что оно требует дополнительных ресурсов. Алгоритмы, которые помогают избежать lock contention лучше подходят для high load. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2015, 16:44 |
|
||
|
lock contention
|
|||
|---|---|---|---|
|
#18+
для себя я перевожу как столкновение на локе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2015, 16:49 |
|
||
|
lock contention
|
|||
|---|---|---|---|
|
#18+
Ок, понятно. теперь, вот что пишут по поводу того как избежать lock contention. авторIn some cases lock contention can be reduced by applying one of the following techniques: The scope of the lock is reduced. The number of times a certain lock is acquired is reduced (lock splitting). Using hardware supported optimistic locking operations instead of synchronization. Avoid synchronization where possible. Avoid object pooling. авторThe scope of the lock is reduced. понятно. Выводим из synchronized секции всё, что не надо синхрониировать авторThe number of times a certain lock is acquired is reduced (lock splitting). Попробовать писать алгоритмы так, чтобы они как можно реже пытались захватить лок? или что тут имеется ввиду? авторUsing hardware supported optimistic locking operations instead of synchronization. непонятно авторAvoid synchronization where possible. Совет ясный, понятный. Не хочешь, чтоб голова болела - отрежь. авторAvoid object pooling Как пул объектов поможет избежать lock contention? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2015, 17:19 |
|
||
|
lock contention
|
|||
|---|---|---|---|
|
#18+
questionerавторThe number of times a certain lock is acquired is reduced (lock splitting). Попробовать писать алгоритмы так, чтобы они как можно реже пытались захватить лок? или что тут имеется ввиду? Ну примерно так. Как пример - не делать один лок на всю мапу а сделать локи на каждый хэшкод сегмент questionerавторUsing hardware supported optimistic locking operations instead of synchronization. непонятно Совет сводится к "знай свое железо". Ну там Cas, transactional memory questionerавторAvoid object pooling Как пул объектов поможет избежать lock contention? [/quot] Метод getFromPool() обязан быть синхронизирован и если ресурсво мало а потоков много - будет большой контенешен. Иногда проще создать ресурс чем юзать пул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2015, 18:36 |
|
||
|
lock contention
|
|||
|---|---|---|---|
|
#18+
остался один вопрос) авторСовет сводится к "знай свое железо". Ну там Cas, transactional memory Когда рассказывают про многопоточность всегда пытаются упомянуть про эти понятия, про спинлоки ещё... а смысл то какой? Что даёт их знание? особеннно contention ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2015, 11:44 |
|
||
|
lock contention
|
|||
|---|---|---|---|
|
#18+
questioner, авторЧто даёт их знание? "их знание" дает понимание, как программировать для современной (железной) платформы так, чтобы программа выполнялась быстро . Часть таких пониманий имеет временный характер. По мере смены поколений железа меняются, иногда существенные, детали понимания того, как программировать для современной платформы. Часто разумно и достаточно писать "как все". Пример. пусть ваша платформа определяется тем, что вы программируете на ява версии X-Y-Z, выполняемой на процессоре серии K-L-M. У вас есть цикл, добавляющий каждому элементу целочисленного массива единицу. Пусть вам становится известно, что быстрее всего такая операция выполнится, если тело цикла развернуть на 16 шагов, и вы хотите, чтобы именно этот фрагмент программы выполнялся быстро, определив его как критический для общего быстродействия. Должны ли вы развернуть тело цикла на 16 шагов или нет? Может быть да - вы же знаете, что пишите специально под указанную платформу и больше никакую другую . Может быть нет. На процессоре серии M-L-K идеальным может оказаться разворот цикла на 8 или 32 или какое-то другое число шагов. Что в такой ситуации ждать самому и говорить клиенту. Если ява вообще будет жить и находить применения в критически важных по производительности приложениях, то, рано или поздно, кто-то из инженеров (oracle) обязательно обратит свой взор к теме автоматической оптимизации циклов. И обучит компилятор, если не байт-кода, то jit - безусловно, генерировать автоматически оптимальный код цикла под текущую платформу выполнения. Скажите клиенту - просто подождите, пока выйдет ява версии 7-8-9, и моя программа сама, без нашего и вашего влияния, заработает у вас так быстро, как вам надо. Но какие-то понимания, и особенно понимание смысла слова contention, являются универсальными. Потому что столбы contention расставляются не только железом и окружением среды выполнения программы - операционной системой, но и программистом на языке имярек собственноручно. В контексте программирования у contention два перевода - конкуренция в одних контекстах, и взрыв в других. Любой contention гарантированно приводит к замедлению выполнения программы. И это - лучший случай, т.к. - худший - потеря данных или отказ в обслуживании. Взрыв - частный, особо зловредный случай неуправляемой конкуренции. Со взрывом вы имеете дело, когда, например, в многопоточном приложении обращаетесь из потока к значению глобальной переменной читая его, а потом добавляя к его значению единицу. Реализация почти наверно приведет к тому, что с точки зрения продвижения кода, процессор будет стоять в ожидании синхронизации кешированных значений глобальной переменной всеми заинтересованными в ее значении потоками. Такой взрыв превращается в катастрофу, когда число программных потоков много больше числа процессорных ядер, и велика частота обращения на запись в такую глобальную переменную. При каком-то числе потоков процессор почти все время занимается синхронизацией, а с точки зрения пользователя - система "легла", демонстрируя нулевой отклик. Понимание того, что такое взрыв, должно помешать желанию программиста пописАть в глобальную переменную из потока. При возникновении управляемой конкуренции за ресурс у вас есть три способа обслуживания конкурентных запросов ресурса - просто отказывать на запрос ресурса, если тот уже занят - иметь очередь ожидающих ограниченной длины, размещая в нее ожидающих до исчерпания ее длины и отказывая всем остальным - иметь неограниченную очередь ожидающих При наличии очередей ожидания, могут отличаться алгоритмы выбора следующего претендента на ресурс из образованной очереди. Здесь степень замедления общей производительности системы определяется длиной очереди, алгоритмом выборки из нее следующего кандидата на владение ресурсом и дисциплиной повторного обращения к ресурсу в случае получения отказа на захват. Невозможно представить попытку собственноручно написать управление доступом к ресурсу, без понимания того ,что такое contention. Все эти механизмы имеют алгоритмический характер. И, со временем, могут не только улучшаться существующие алгоритмы управления конкуренцией, но и появляться новые. Поэтому целесообразно следить за развитием библиотечной части. Новые алгоритмы обычно располагают в новых библиотеках. подытоживая, скажу так в ответ на ваш вопрос авторЧто даёт их знание?... особеннно contention Понимание того, что такое contention, - дает программисту право начинать пробовать себя в многопоточном коде. Потому что многопоточный код в руках программиста не понимающего, что такое contention - много страшнее гранаты в руках обезьяны. Такие люди не должны быть допущены к написанию никакого многопотчного кода, даже если им не приходится выписывать управление доступом к ресурсу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2015, 13:35 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39085117&tid=2124778]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
177ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 478ms |

| 0 / 0 |
