
Pavel ?
20.06.2018
19:14:47
Фото зачёт)

Vik
20.06.2018
19:14:55
Мужик сзади как-то недобро глядит
Скажите мне к вот это вообще нормально https://twitter.com/agaro1121/status/1009505596293419010?

guga
20.06.2018
19:18:30

Google

Vik
20.06.2018
19:18:40

KrivdaAllStars
20.06.2018
19:18:45
@dmsol добавь в ништяки ваши видео)

Grigory
20.06.2018
19:18:56
правда подизмененная интересный хак

KrivdaAllStars
20.06.2018
19:19:52

1337
20.06.2018
19:20:42
день толерантности к скалистам

Pavel ?
20.06.2018
19:35:22
T is covariant, so <:<##<О_О<:< must be used, =:=o!o=:= cannot be

Anton
20.06.2018
20:25:57

1337
20.06.2018
20:31:53
> какие-то наSCALьные иероглифы из черточек и точек
> нормально

Евгений
20.06.2018
20:37:28
нормально

Митко Соловец?
20.06.2018
21:15:14


Vladimir
20.06.2018
21:20:02
кто-нибудь может объяснить, как работает CAS в multicore-среде? в частности, интересует простейший инкремент числа. если операция производится несколькими потоками, которые выполняются на одном цп, то из-за атомарности CAS-а состояние гонки не возникает, а меня интересует, что будет, когда два потока на разных цпу одновременно выполнят CAS. в итоге же обе операции заканчиваются записью значения в рам, как они друг друга не перезаписывают? или есть какие-то средства для корректного осуществления атомарных операций на разных цп? или вообще не стоит с этим заморачиваться?
вот есть поток А на цп 1, поток Б на цп 2, оба абсолютно одновременно (разные цп, не многозадачность) начали CAS на общей переменной, равной 0, оба проверили актуальное значение и сравнили со значением из памяти, оно равно 0, записали измененное значение, и в итоге должна получиться единица вместо двойки, если первый произвел запись чуть раньше второго? я понимаю, что все эти действия - это одна операция, но как эти операции синхронизируются между собой на разных цп, ведь это независимые операции? или все это происходит как-то иначе? не cache coherence ли?

Google

Pavel ?
20.06.2018
21:33:39
точнее на чем основан)
как узнаешь, вопросы уйдут)

Vladimir
20.06.2018
21:36:15
т.е нужно углубиться в то, как это реализовано на машинном уровне?

Pavel ?
20.06.2018
21:36:23

Vladimir
20.06.2018
21:37:15
да)
а джава-разработчикам вообще нужно залезать так глубоко?

Pavel ?
20.06.2018
21:37:20
там все просто) просто у амд и интела инструкция появилась
атомарная

Alexander
20.06.2018
21:37:27
хороший ответ

Pavel ?
20.06.2018
21:37:29
ее и используют)

Alexander
20.06.2018
21:37:39
как тебе не скажу, но погугли сам, там все написано
а как роботате это атормана инструкция

Pavel ?
20.06.2018
21:38:19

Alexander
20.06.2018
21:39:04
на самом деле нет
по сути все упирается в одну инструкцию, а как она работает и как кэш лайны там обрабатываются это уже такое себе знание, которое нужно разве что для того, что бы глянуть, что там стучит со дна

Pavel ?
20.06.2018
21:41:48
да, как-то так, щас будет след. вопрос что такое кеш лайн)
что ты людей путаешь)

Alexander
20.06.2018
21:42:28
и сразу можно отправить гуглить всякие mesifы

Pavel ?
20.06.2018
21:49:05

Ed
20.06.2018
21:49:39
Когерентность кешей

Google

Ed
20.06.2018
21:49:54
И никакой записи в память

Alexander
20.06.2018
21:50:13
память не нужна

Ed
20.06.2018
21:50:31
Мне кажется, или раз в неделю этот вопрос поднимается?)

Pavel ?
20.06.2018
21:51:03
ну да) в данном случае эта вся хрень не нужна, как мне кажется)

Vladimir
20.06.2018
22:00:24
в общем, насколько я понял, грубо говоря - это достигается за счет локов, а что там и как все это происходит в деталях, знать необязательно, по крайней мере работая с джавой

Pavel ?
20.06.2018
22:02:00

Vladimir
20.06.2018
22:02:52
имеешь в виду на уровне языка?

Pavel ?
20.06.2018
22:03:07
подхода в целом)
если говорить про жабу то там это реализовано на уровне unsafe) покопай там)

Vladimir
20.06.2018
22:06:11
Да, лазил по AtomicXXX. А начиная с J8, как я понимаю, все AtomicXXX поддерживают updateAndGet, который этот цикл и организует, поэтому необходимость в написании своего цикла с compareAndSet отпадает

Pavel ?
20.06.2018
22:06:22
когда кстати этот unsafe снесут?))

Alexander
20.06.2018
22:06:54
https://spcl.inf.ethz.ch/Publications/.pdf/atomic-bench.pdf

Alexander
20.06.2018
22:07:50
давайте копнем глубже говорили они

Pavel ?
20.06.2018
22:08:26

Vladimir
20.06.2018
22:10:14

Ed
20.06.2018
22:13:01
Как без Unsafe жить то?
Сколько проектов you offheap
Используют*

Google

Alexander
20.06.2018
22:14:08

Vladimir
20.06.2018
22:14:53

Marat
20.06.2018
22:15:13

Alexander
20.06.2018
22:18:45

Pavel ?
20.06.2018
22:32:38

Admin
ERROR: S client not available

Ed
20.06.2018
22:40:33
Мы тоже юзаем offheap, обмазались, конечно. Но если будут выпиливать, то форкать

Evgeny
20.06.2018
22:40:36
Дима, я не сталкивался с такой задачей, так что сходу ничего в голову не приходит. Сорян

Ed
20.06.2018
22:40:50
OpenJVM лучше чем переписывать)

Pavel ?
20.06.2018
22:41:30

Evgeny
20.06.2018
22:43:03
/stat@combot

Combot
20.06.2018
22:43:03
combot.org/c/-1001043090457

Vik
20.06.2018
22:51:27
@dmsol

Митко Соловец?
20.06.2018
22:52:04


Dmitrii
20.06.2018
22:55:09
кто-нибудь может объяснить, как работает CAS в multicore-среде? в частности, интересует простейший инкремент числа. если операция производится несколькими потоками, которые выполняются на одном цп, то из-за атомарности CAS-а состояние гонки не возникает, а меня интересует, что будет, когда два потока на разных цпу одновременно выполнят CAS. в итоге же обе операции заканчиваются записью значения в рам, как они друг друга не перезаписывают? или есть какие-то средства для корректного осуществления атомарных операций на разных цп? или вообще не стоит с этим заморачиваться?
Если речь идёт об интелах, то в тут два случая. Когда L1 и L2 не содержат кэшлайн того что ты пытаешься каснуть, тогда транзакция сериализуется на L3. Если содержит, то тут инструкция с префиксом lock (не только cmpxchg) требует кэшлайн в Exclusive стейте и другие ядра во время её исполнения не имеют права статус поменять (ЕМНИП).

Pavel ?
20.06.2018
22:57:21

Dmitrii
20.06.2018
22:59:24

Vladimir
20.06.2018
23:02:15

Pavel ?
20.06.2018
23:09:13
Кеш лайн, не кеш лайн) что нужно сделать с филдом в классе чтобы кеш лайн имел меньшую вероятность инвалидации?)

Google

Ed
20.06.2018
23:10:37
Начнем с мотивации) Зачем имел меньшую вероятность?

Pavel ?
20.06.2018
23:10:37
Ну или с классом))

Dmitrii
20.06.2018
23:10:53

Pavel ?
20.06.2018
23:11:26

Ed
20.06.2018
23:12:02
Речь про false sharing?

Dmitrii
20.06.2018
23:12:06

Ed
20.06.2018
23:12:09
Ну тогда наследование

Pavel ?
20.06.2018
23:12:17

Dmitrii
20.06.2018
23:12:29

Pavel ?
20.06.2018
23:12:42

Ed
20.06.2018
23:13:07
Ну jvm не даёт гарантий про укладку в рамках одного класса
Но гарантирует, что родительские будут до

Dmitrii
20.06.2018
23:14:30

Pavel ?
20.06.2018
23:16:59

Ed
20.06.2018
23:18:19
http://psy-lob-saw.blogspot.com/2014/06/notes-on-false-sharing.html?m=1
+ от кого-то еще слышал (вроде, Шипилев)

Pavel ?
20.06.2018
23:19:40

Ed
20.06.2018
23:20:00
а работает ли на других JVM - хз, никогда другую JVM в руках и не держал (кроме IBM для WebSphere, в кровавых тырпырпрайзах)