|
|
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, вышенаписанное не имеет отношения к java.util.concurrent.Future ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 15:11 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
событийная модель у меня всё чаще вызывает ощущение что тупо вернули когда то похеренный оператор гоу-ту в бейсике образца 1978-го года. и назвали его ивентом. а суть та же )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2016, 22:41 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
natanabrahamjrсобытийная модель у меня всё чаще вызывает ощущение что тупо вернули когда то похеренный оператор гоу-ту в бейсике образца 1978-го года. и назвали его ивентом. а суть та же )) Да многое можно назвать синтаксическим сахаром, однако же так удобнее, чем совсем без сахара, в машинных кодах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 06:58 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
privateАсинхронность в жаве - это костыль призванный компенсировать неспособность жавы и JVM эффективно работать с легкими процессами. А что такое этот ваш "легкий процесс"? Попахивает, что это просто маркетинговый bullshit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 07:58 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimir, наверное, имеется в виду линуксовый fork(). Но это лет 20 как не модно уже - все современные демоны используют потоки и селекторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 10:32 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
В контексте исходного вопроса топика мне очень нравится начало доклада Руслана Черемина на одном из JPoint [spoiler] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 11:52 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirТак как нет спроса на такое количество специалистов, знающих это область на высоком уровне, для подавляющего большинства задач достаточно уметь правильно проставлять synchronized и volatile и на этом потребности заканчиваются. А, ну на таком то уровне надеюсь я уже изучил. Большинство работодателей получается не станет спрашивать про модель памяти Java, happens-before, и всякие там семафоры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 12:06 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLojust_vladimirТак как нет спроса на такое количество специалистов, знающих это область на высоком уровне, для подавляющего большинства задач достаточно уметь правильно проставлять synchronized и volatile и на этом потребности заканчиваются. А, ну на таком то уровне надеюсь я уже изучил. Большинство работодателей получается не станет спрашивать про модель памяти Java, happens-before, и всякие там семафоры? Ну модель памяти в Java ничего общего с Subj не имеет и понимать разбиение heap'а на области - imho желательно, что бы совсем уж говнокод жрущий по 1-2 Gb памяти не писать. С happens before - я вообще подозреваю, что людей которые в этом разбираются очень мало. Т.к. например лично я, вообще понять не могу чем store-store порядок от store-load отличается ))) И зачем при наличие store-load синхронизации народ еще в обязательно порядке store-store впихивает ))) Нафига нужны volatile и как ими корректно пользоваться, мне не очень понятно, Atomic мне кажется более логичным и понятным классом (хотя визуально объявлены через volatile). IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:05 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНу модель памяти в Java ничего общего с Subj не имеет и понимать разбиение heap'а на области - imho желательно, что бы совсем уж говнокод жрущий по 1-2 Gb памяти не писать. Ага, как же, не имеет. А почему-то мне пришлось в процессе изучения конкаренси неоднократно на это натыкаться. Leonid KudryavtsevС happens before - я вообще подозреваю, что людей которые в этом разбираются очень мало. Т.к. например лично я, вообще понять не могу чем store-store порядок от store-load отличается ))) И зачем при наличие store-load синхронизации народ еще в обязательно порядке store-store впихивает ))) Когда смотришь видеолекцию про это, вроде с трудом, но понятно. Зато в голове как-то не застревает. Leonid KudryavtsevНафига нужны volatile и как ими корректно пользоваться, мне не очень понятно, Atomic мне кажется более логичным и понятным классом (хотя визуально объявлены через volatile). Про волатайл я с трудом но вроде понял. Добавляет атомичности чтению записи в лонг и дабл, плюс отменяет кеширование переменной, чтобы все потоки актуальное значение читали. Ну и соответственно устанавливает хэппенс-бефо между записью и дальнейшими чтениями. Кроме того, когда поток читает такую переменную, он видит не только последнее значение переменной, но и также побочные эффекты кода который привёл к изменению. Вроде всё, или ещё что-то нужно про это знать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:21 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНу модель памяти в Java ничего общего с Subj не имеет и понимать разбиение heap'а на области - imho желательно, что бы совсем уж говнокод жрущий по 1-2 Gb памяти не писать. ой ли, JMM как раз имеет непосредственное отношение к concurrency Leonid KudryavtsevС happens before - я вообще подозреваю, что людей которые в этом разбираются очень мало. Я бы уточнил, кто разбирается в этом на должном уровне Leonid KudryavtsevТ.к. например лично я, вообще понять не могу чем store-store порядок от store-load отличается ))) И зачем при наличие store-load синхронизации народ еще в обязательно порядке store-store впихивает ))) имхо, это Вы уже куда-то на уровень реализации полезли Leonid KudryavtsevНафига нужны volatile и как ими корректно пользоваться, мне не очень понятно, Atomic мне кажется более логичным и понятным классом (хотя визуально объявлены через volatile). не, здесь как раз все просто, описывается формулой atomic = volatile + CAS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:28 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLoПро волатайл я с трудом но вроде понял. Добавляет атомичности чтению записи в лонг и дабл Верно, хотя я бы не конкретизировал про long/double, просто добавляет атомарность XDiaBLoплюс отменяет кеширование переменной, чтобы все потоки актуальное значение читали. Про кэши это от лукавого, вообще не надо об этом думать XDiaBLoНу и соответственно устанавливает хэппенс-бефо между записью и дальнейшими чтениями. Верно XDiaBLoКроме того, когда поток читает такую переменную, он видит не только последнее значение переменной, но и также побочные эффекты кода который привёл к изменению. Совершенно не факт, что он видит последнее значение переменной, но если он увидел какое то значение, то гарантируется, что он увидит все другие изменения выполненные потоком выполнявшим запись этого значения, которые были выполнены до момента записи в эту переменную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:41 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirСовершенно не факт, что он видит последнее значение переменной Так у Оракла в туториале написано. Только сегодня этот момент читал. Если врут, ну это печально. just_vladimirно если он увидел какое то значение, то гарантируется, что он увидит все другие изменения выполненные потоком выполнявшим запись этого значения, которые были выполнены до момента записи в эту переменную. Вот тут вроде и всё понятно, однако такое впечатление, будто происходит какой-то сброс кеша потока в момент записи волатайл. И мне не очень понятно почему я не должен думать о кешах, в смысле я должен мыслить на другом уровне абстракции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:45 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirне, здесь как раз все просто, описывается формулой atomic = volatile + CAS Просто хотелось бы пример корректного кода __чисто__ на volatile. Например аналог банального AtomicInteger.inc ))) А пока мое IMHO volatile практически бесполезное ключевое слово. О котором достаточно просто знать, что оно есть. (да и то не обязательно). Т.к. на практике или synchronized или Atomic или что-то более сложное для конкретных задач. имхо, это Вы уже куда-то на уровень реализации полезли А без этого понять работу кода one producer - one consumer queue vs ConcurrentLinkedQueue на мой взгляд совсем не реально ))) По этому все это "уровень реализации" и наверное достаточно просто иметь общее представление и уметь пользоваться библиотеками. Ну и например ConcurrentLinkedQueue от гонок в бизнес логике не защищает. Т.ч. я бы сказал, что любое использование чего либо кроме synchronized в 99% "полезть на уровень реализации" с возможностью словить плохо тестируемые гонки в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:48 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLoВот тут вроде и всё понятно, однако такое впечатление, будто происходит какой-то сброс кеша потока в момент записи волатайл. И мне не очень понятно почему я не должен думать о кешах, в смысле я должен мыслить на другом уровне абстракции? На Intel архитектурах когерентность кеша обеспечивается hardware. Поэтому на Intel думать ни о каком сбросе кеша не нужно. На других архитектурах, это берет на себя JVM. AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:52 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLojust_vladimirСовершенно не факт, что он видит последнее значение переменной Так у Оракла в туториале написано. Только сегодня этот момент читал. Если врут, ну это печально. Можно ссылочку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:55 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevXDiaBLoВот тут вроде и всё понятно, однако такое впечатление, будто происходит какой-то сброс кеша потока в момент записи волатайл. И мне не очень понятно почему я не должен думать о кешах, в смысле я должен мыслить на другом уровне абстракции? На Intel архитектурах когерентность кеша обеспечивается hardware. Поэтому на Intel думать ни о каком сбросе кеша не нужно. AFAIK Вот уже второй раз ошибаешься :) Если есть два разных кэша (например два проца), то записав данные в память можно, конечно, всегда требовать, чтобы эта же строка, если она есть к кэша другуого процессора, обновилась, но это ОЧЕНЬ дорого стоит. Для этого и есть волотайл как частный случай барьера. Т.е. эфективная программа старается лишний раз кэш не сбрасывать. А то ещё бывает false-sharing, который может привести либо к диким тормозам, либо к лишнему расходу памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:56 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirXDiaBLoпропущено... Так у Оракла в туториале написано. Только сегодня этот момент читал. Если врут, ну это печально. Можно ссылочку? Да конечно, хотя ищется легко: https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html авторWhat's more, it also means that when a thread reads a volatile variable, it sees not just the latest change to the volatile , but also the side effects of the code that led up the change. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 14:57 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Alexey TominLeonid Kudryavtsevпропущено... На Intel архитектурах когерентность кеша обеспечивается hardware. Поэтому на Intel думать ни о каком сбросе кеша не нужно. AFAIK Вот уже второй раз ошибаешься :) Если есть два разных кэша (например два проца), то записав данные в память можно, конечно, всегда требовать, чтобы эта же строка, если она есть к кэша другуого процессора, обновилась, но это ОЧЕНЬ дорого стоит. Для этого и есть волотайл как частный случай барьера. Т.е. эфективная программа старается лишний раз кэш не сбрасывать. А то ещё бывает false-sharing, который может привести либо к диким тормозам, либо к лишнему расходу памяти. Так я вот как раз говорил о том, что такое впечатление что запись в волатайл переменную приводит к обновлению не только самой этой волатайл переменной, но и того что менялось до неё. И интересуюсь правильное ли это предположение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:00 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLoТак я вот как раз говорил о том, что такое впечатление что запись в волатайл переменную приводит к обновлению не только самой этой волатайл переменной, но и того что менялось до неё. И интересуюсь правильное ли это предположение? Да. Хотя это я плохо понимаю ))). Запись в volatile переменную приводит к срабатыванию барьера. Более "странно" на мой взгляд, что в конструкторе final поля тоже являются барьером. Т.ч. если у тебя immutable класс, где все поля final, то его можно безопасно передавать между потоками. А вот, если он не immutable (mutable) то можно словить проблемы. Вроде сейчас Java-гуру обсуждают, не стоит ли сам new сделать барьером (на мой взгляд стоит, а то хрень разберешь современное поведение) но вроде в JVM 1.8 этого еще нет. AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:13 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Alexey TominВот уже второй раз ошибаешься :) Можно ссылку? https://en.wikipedia.org/wiki/MESIF_protocol Alexey TominА то ещё бывает false-sharing, который может привести либо к диким тормозам, либо к лишнему расходу памяти. Одно другому не мешает. false-sharing как раз и есть проблема из-за cache conerence. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:17 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevjust_vladimirне, здесь как раз все просто, описывается формулой atomic = volatile + CAS Просто хотелось бы пример корректного кода __чисто__ на volatile. Например аналог банального AtomicInteger.inc ))) А пока мое IMHO volatile практически бесполезное ключевое слово. О котором достаточно просто знать, что оно есть. (да и то не обязательно). Т.к. на практике или synchronized или Atomic или что-то более сложное для конкретных задач. getAndIncrement на чистом volatile вы не реализуете, т.к. это требует CAS. Зачем нужен volatile - здесь просто, допустим у вас есть singleton глобальная static переменная, но которая не volatile, дак вот в этой ситуации у вас нет никакой гарантии, что разные потоки работающие с этой переменной будут видеть действия друг друга, у каждого потока может существовать свой лунапарк с блекджеком и мир, со своей переменной и он будет видеть только свои изменения. XDiaBLojust_vladimirпропущено... Можно ссылочку? Да конечно, хотя ищется легко: https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html авторWhat's more, it also means that when a thread reads a volatile variable, it sees not just the latest change to the volatile , but also the side effects of the code that led up the change. Я не вижу здесь указания на то, что при чтении мы обязаны увидеть именно последнее значение, которое было туда записано. Но вот как только он его увидит, вот тогда уже: авторbut also the side effects of the code that led up the change ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:28 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimir, автор latest change to the volatile ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:29 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
Про то, что не стоит пытаться опуститься на уровень реализации, а нужно постичь дзен JMM можно читать у Шипилева https://shipilev.net/blog/2016/close-encounters-of-jmm-kind/ Впрочем я сколько раз не пытался осилить, так до конца и не осилил)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:33 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
XDiaBLo, сойдемся на том, что мы немного по разному понимаем английский язык :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:34 |
|
||
|
java concurrency and multithreading
|
|||
|---|---|---|---|
|
#18+
just_vladimirПро то, что не стоит пытаться опуститься на уровень реализации, а нужно постичь дзен JMM можно читать у Шипилева https://shipilev.net/blog/2016/close-encounters-of-jmm-kind/ Впрочем я сколько раз не пытался осилить, так до конца и не осилил)) Спасибо за ссылку. just_vladimirXDiaBLo, сойдемся на том, что мы немного по разному понимаем английский язык :-) А что там понимать то? автор latest change to the volatile Самое последнее изменение в перменчивой переменной :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2016, 15:38 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39320347&tid=2123646]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 346ms |

| 0 / 0 |
