Экспорт Mysql в CSV файл запрос по дате

lazySet может использоваться для связи между потоками rmw, потому что xchg является атомарным, так как для видимости, когда процесс потока писем изменяет местоположение строки кэша, процессор считывающего потока увидит его при следующем чтении, потому что протокол согласованности кеширования intel cpu будет гарантировать, что LazySet работает, но строка кэша будет обновлена ​​при следующем чтении, опять же, процессор должен быть достаточно современным.

http://sc.tamu.edu/systems/ eos / nehalem.pdf Для Nehalem, которая является многопроцессорной платформой, процессоры имеют возможность «отслеживать» (подслушивать) адресную шину для доступа другого процессора к системной памяти и к их внутренним кэшам. Они используют эту способность отслеживания, чтобы сохранить свои внутренние тайники как в системной памяти, так и в кэшах в других взаимосвязанных процессорах. Если через отслеживание одного процессора обнаруживается, что другой процессор намеревается записать в ячейку памяти, которую он в настоящее время кэшировал в общем состоянии, процессор отслеживания сделает недействительным свой блок кэша, заставляя его выполнять кеш-строку, заполняя при следующем обращении к той же ячейке памяти .

oracle hotspot jdk для архитектуры x86 cpu ->

lazySet == unsafe.putOrderedLong == xchg rw (инструкция asm, которая служит в качестве мягкого барьера стоимостью 20 циклов на процессоре nehelem intel cpu )

на x86 (x86_64), такой барьер намного дешевле, чем волатильный или AtomicLong getAndAdd,

В одном продюсере один сценарий очереди потребителей, мягкий барьер xchg может заставить строка кодов перед тем, как lazySet (последовательность + 1) для потока производителя произойдет до любого кода потребительского потока, который будет потреблять (работать) с новыми данными, конечно, потребительский поток должен будет проверить атомарно, что последовательность производителей была увеличена ровно на один используя compareAndSet (последовательность, последовательность + 1).

Я проследил после исходного кода Hotspot, чтобы найти точное сопоставление lazySet с кодом cpp: http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/9b0ca45cd756/ src / share / vm / prims / unsafe.cpp Unsafe_setOrderedLong -> SET_FIELD_VOLATILE definition -> OrderAccess: release_store_fence. Для x86_64 OrderAccess: release_store_fence определяется как использование инструкции xchg.

Вы можете видеть, как это точно определено в jdk7 (doug lea работает над некоторыми новыми материалами для JDK 8): http://hg.openjdk.java.net/jdk7/jdk7/ hotspot / file / 4fc084dac61e / src / os_cpu / linux_x86 / vm / orderAccess_linux_x86.inline.hpp

вы также можете использовать hdis для демонстрации сборки кода lazySet в действии.

Есть еще один связанный с этим вопрос: Нужно ли нам использовать mfence при использовании xchg

0
задан Iman Firdaus 31 December 2018 в 09:32
поделиться