|
|
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Коллеги расскажите как сие реализовано в JVM пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:22:47 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Что именно вам непонятно? Вопрос смахивает на как реализован Unix ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:30:13 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Понятно что оно используется для volatile переменных Вопрос как ? Ну то есть есть переменная volatile Один тред туда пишет - второй читает. Как в asm коде будет выглядеть реализация констейнта happens-before ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:32:02 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Хотя побуду телепатом. Есть JVM-спецификация, по которой определенные действия должны происходить как happens-before. Тот кто имплементирует JVM на отдельной архитектуре должен соблюсти спецификацию, не важно каким образом, иначе это будет уже не JVM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:32:11 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
eextrasensПонятно что оно используется для volatile переменных Вопрос как ? Ну то есть есть переменная volatile Один тред туда пишет - второй читает. Как в asm коде будет выглядеть реализация констейнта happens-before ? Как? Зависимым от архитектуры образом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:33:14 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
А можно пример привести как оно на пальцах работает на примере двух тредов на любой их архитектур Пусть HotSpot Jdk6 Unix ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:35:21 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Синхронизация памяти достигается в основном мембарами(они же fences). Google it. То есть если переменная не volatile все происходит так - int i =0; writeToNonVolatileMemory() volatile int i = 0; writeToVolatileMemory() membar(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:39:49 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Коллега, забыл ник, а если Вы в курсе что такое fences в деталях опишите пожалуйста. Больно трудно такое гуглить когда вообше не представляешь о чем это ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:42:05 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
eextrasensБольно трудно такое гуглить когда вообше не представляешь о чем это"memory barries" - указание аппаратуре процессора отключить переупорядочивание доступа и прочие финты ушами. Для компилятора, кроме того, volatile - означает запрет на "регистровую оптимизацию". А теперь возникает вопрос - задлянафига вы спрашиваете на форуме то, что нужно вдумчиво и самостоятельно изучать? И самое главное: "Вы с какой целью интересуетесь?" Вот чем вам это будет полезно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:48:34 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Basil A. SidoroveextrasensБольно трудно такое гуглить когда вообше не представляешь о чем это"memory barries" - указание аппаратуре процессора отключить переупорядочивание доступа и прочие финты ушами. Для компилятора, кроме того, volatile - означает запрет на "регистровую оптимизацию". А теперь возникает вопрос - задлянафига вы спрашиваете на форуме то, что нужно вдумчиво и самостоятельно изучать? И самое главное: "Вы с какой целью интересуетесь?" Вот чем вам это будет полезно? >> запрет на "регистровую оптимизацию". Зависит от процессора возможно просто сбросятся регистровые кеши других тредов в современных процах >> А теперь возникает вопрос - задлянафига вы спрашиваете на форуме то, что нужно вдумчиво и самостоятельно изучать? Пробывал тяжело стало - решил вселенский разум о помощи попросить - вроде для этого форумы такие и существуют чтоб учиться когда совсем не понимаешь >> И самое главное: "Вы с какой целью интересуетесь?" Вот чем вам это будет полезно? Для общего развития и более глубокого понимания JVM и JMM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:50:57 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
eextrasensЗависит от процессора возможно просто сбросятся регистровые кеши других тредов в современных процахВы это знаете или только что придумали? Это уж я молчу, что "вам уже непонятно" - размещение volatile-переменной в регистре создаёт проблемную точку на единственном однопоточном процессоре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:54:39 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Basil A. SidoroveextrasensЗависит от процессора возможно просто сбросятся регистровые кеши других тредов в современных процахВы это знаете или только что придумали? Это уж я молчу, что "вам уже непонятно" - размещение volatile-переменной в регистре создаёт проблемную точку на единственном однопоточном процессоре. Скажем так это гипотеза :) Коллега помогите по сабжу - если знаете реально как оно там работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:55:42 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
eextrasensКоллега помогите по сабжу - если знаете реально как оно там работаетЯ, что, числюсь в списка разработчиков ядра JVM/Hotspot? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:58:44 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
:) ок ждем тех кто в теме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 19:59:37 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Вряд ли тут вам кто-то еще что-то скажет. По этой теме надо действительно читать и читать, и разбираться. Да и посмотрите наконец исходники JVM, там наиболее актуальные сведения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 20:17:05 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Ну мало ли :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 20:17:41 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
eextrasensНу мало ли :) Могу посоветовать ресурсы на русском) Все довольно просто и понятно) http://habrahabr.ru/post/133981/ http://shipilev.net/pub/talks/j1-April2012-jmm.pdf http://shipilev.net/pub/talks/j1-April2011-performanceBoF.pdf http://cheremin.blogspot.com/search/label/threading ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 22:08:57 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Возможно эти ссылки не совсем то что вы ищите, к сожаление не могу найти в закладках про реализацию) http://www.javaspecialist.ru/2011/06/java-memory-model.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 22:20:01 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
То что надо - диаграмма от Шипилева :) Довелось встретить этого перфоманс гуру из Оракла как то в Питере. Ежу становится понятны механизмы и что такое happens-before Осталось понять как оно там внутри устроено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 22:42:06 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
eextrasensТо что надо - диаграмма от Шипилева :) Довелось встретить этого перфоманс гуру из Оракла как то в Питере. Ежу становится понятны механизмы и что такое happens-before Осталось понять как оно там внутри устроено. Согласен) Где то я видел как это устроенно) В комментариях вот этот пользователь писал http://habrahabr.ru/users/apangin/ и еще где-то в блоге http://cheremin.blogspot.com/search/label/threading было про синхронизацию кэша и локальной памяти и про всякие разные команды процессора) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 22:51:40 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
У него в списке комментариев иногда есть ответы типа такого: "В HotSpot JVM на x86/amd64 запись volatile поля сопровождается инструкцией LOCK ADD [RSP], 0 что достаточно для эффективного membar'а вместо медленного MFENCE. Чтение volatile поля ничем не отличается от чтения обычного поля. Что касается final полей, HotSpot с ними всегда работает как с обычными. Никаких дополнительных действий для обеспечения вышеупомянутой семантики final виртуальная машина не осуществляет, ровно по той причине, что на всех ныне поддерживаемых архитектурах (x86, SPARC, ARM, PPC), пример ReorderingSample никогда не свалится. Случая с Reflection это не касается, поскольку он относится с Class Libraries и реализован за пределами JVM." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 22:52:54 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
rdm, Спасибо - очень полезные ссылки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2012, 23:05:44 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Basil A. SidoroveextrasensКоллега помогите по сабжу - если знаете реально как оно там работаетЯ, что, числюсь в списка разработчиков ядра JVM/Hotspot?а чо ёрничаешь-то? как баба в пмс прям.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2012, 00:35:20 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
grasoff.netа чо ёрничаешь-то?Если человек не понимает намёков, выбор формулировки - за мной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2012, 10:50:03 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovразмещение volatile-переменной в регистре создаёт проблемную точку на единственном однопоточном процессоре. Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2012, 10:53:50 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПочему?Потому, что переключение задач (передача управления другому потоку того же самого процесса) может произойти в любой момент. Семантика volatile: "Значение данной переменной может измениться в произвольный момент и это не управляется кодом потока". Если оставаться в рамках x86 и персоналок, то в цепочке типа: Код: asm 1. 2. Такое изменение может быть и "непринципиально" и "ошибка". Поэтому начинаются варианты - то ли критические секции создавать (дорого, если код короткий), то ли отказаться от регистровой оптимизации, то ли забить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2012, 11:09:48 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovПотому, что переключение задач (передача управления другому потоку того же самого процесса) может произойти в любой момент. Семантика volatile: "Значение данной переменной может измениться в произвольный момент и это не управляется кодом потока". Если оставаться в рамках x86 и персоналок, то значение переменной могло измениться, пока мы работали с регистром. Такое изменение может быть и "непринципиально" и "ошибка". Поэтому начинаются варианты - то ли критические секции создавать (дорого, если код короткий), то ли отказаться от регистровой оптимизации, то ли забить :) По-моему современные процессоры это нечто большее чем запись-чтение в реестр отдельными командами. Не про Java, но все же http://softwareramblings.com/2008/05/demystifying-the-volatile-keyword.html Common myths about the volatile keyword: A volatile variable will never reside in cache memory – e.g. within the L2 cache of a processor. This is not true. In the case where the volatile variable is shared between two software threads, it is highly likely that the variable will exist in cached memory and the cache coherency policy will ensure that the threads will see the correct and up-to-date value of the variable in the event that the threads are running on seperate cores that don’t share the same cache. When the volatile variable refers to a hardware register, it is likely that the memory map of the system will be setup such that this register is not cacheable in the processor cache, but this is setup and managed by the appropriate device driver and is not something that is provided by the volatile keyword. я не вижу каких либо препядствий тому чтобы разместить volatile переменную на CPU и использовать его собственные механизмы кеширования и синхронизации между потоками. Это, конечно, не совсем реестр. Но и не RAM, где фактически хранится общее значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2012, 11:20:17 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Хотя, ваша правда в том что реестр это не CPU-кэш и там нет механизмов инвалидации, поэтому именно через реестр volatile реализовать, похоже, нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2012, 11:45:21 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Blazkowiczя не вижу каких либо препядствий тому чтобы разместить volatile переменную на CPU и использовать его собственные механизмы кеширования и синхронизации между потоками.Процитированное никак не противоречит тому, что я сказал о семантике volatile. Отслеживание адресов и сквозная запись - всего лишь механизмы, делающие принципиально возможной синхронизацию потоков, исполняющихся на разных ядрах или даже "кристаллах". P.S. Я напомню, что при отложенной записи некоторые изменения могут вообще "не попасть" на адресную шину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2012, 11:46:58 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Blazkowiczя не вижу каких либо препядствий тому чтобы разместить volatile переменную на CPU и использовать его собственные механизмы кеширования и синхронизации между потоками. Это, конечно, не совсем реестр. Но и не RAM, где фактически хранится общее значение. Если вкладывать в понятие volatile какое-то своё значение то может быть, может быть. Однако в JMM запись volatile связанна отношением happens-before с чтением volatile и поэтому просто одну переменную синхронизировать между потоками недостаточно, чтобы удовлетворять happens-before нужно синхронизировать весь кеш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2012, 23:30:40 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
Я думаю в таком сложном вопросе лучше обратиться к первоисточнику: 1. Пишем пример с volatile 2. Ставим hotspot disassembler: https://wikis.oracle.com/display/HotSpotInternals/PrintAssembly 3. Пускаем пример, смотрим чего нагенерил jit 4. Смотрим чего какая инструкция делает: http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html Ещё в сорцах openjdk много комментариев, можно попробовать там раскопать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2012, 10:08:47 |
|
||
|
before-happens в JVM
|
|||
|---|---|---|---|
|
#18+
rrrrrrrr, О хорошая мысль, спасибо. Только что такое MEMBER и FENCES из асм кода вряд ли станет понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2012, 12:40:23 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2130881]: |
0ms |
get settings: |
17ms |
get forum list: |
19ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
51ms |
get topic data: |
17ms |
get forum data: |
4ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 301ms |
| total: | 505ms |

| 0 / 0 |
