Ну на практике я бы проявлял здоровый скепсис к его советам, не зря же его Женя Пешков за volatile укусил. В multithreading-е все-таки реализация сильно сложнее, чем это выглядит в теории.
ребята/коллеги, про волатайл - это всего-лишь указание компилятору/интерпретатору не использовать в оптимизации кода, при работе с этой переменной/членом всякие оптимизации, напримре, как копирование "нашей/данной" ячейки памяти в регистровую память. То есть - всегда нужно сначала "её" из ОЗУ получить, и побыренькому её заюзать, иначе полученное значение/value потеряет свой смысл и значимость. Так что... о волатайлах - не забывайте, хотя... пример от си-пи-пишников - std::atomic - каков "великий" смысл данной конструкции?
Вы описываете ключевое слово volatile из C и C++. В C# его смысл немного другой. См. секцию "14.5.4 Volatile fields" спецификации ECMA-334 (я использую шестую редакцию): операции чтения и записи над volatile полем имеют acquire/release семантику. Интересно, что в C++ упомянутый вами std::atomic также позволяет гарантировать соблюдение похожей семантики, в отличие от ключевого слова volatile из того же C++.
@@fvnever ... на самом деле я больше писал, про атомик. волатайл - это больше указание компилятору, чем самому си-пи-ю а вот атомик-от-боол - это прикольно, смысл, как от бывшего электронщика ускользает ( ну кроме совсем исключительных случаев).
@@vladlenbulatov1022 Я тут попытался написать ответ с парой ссылок, но Ютубу не нравятся такие комментарии, и он их постить отказывается, так что извините, на этот раз будет без пруфов. atomic, как и другие атомики, нужен, чтобы иметь определённые гарантии при записи и чтения значения переменной (какие именно гарантии - в C++ можно задать аргументом при вызове методов store и load, например, ну и всякие там exchange, которые предоставляют доступ к более интересным сценариям). Возможно, для электронщика ближе окажется тема протоколов когерентности кэшей в CPU - советую почитать на вики. Также относительно несложно можно найти обсуждения по поводу связи между когерентностью кэшей и прикладным программированием - в частности, даже полностью прозрачный («когерентный») CPU кэш не позволяет легко реализовать тот же самый атомарный exchange. Поэтому атомик всё ещё может быть нужен, даже для bool.
@@АлександрК-у6ю Спасибо, тут всё как-то скомкано, автор перескакивает с темы на тему, много слов паразитов. Реально понять можно только то, с чем уже имел дело. На 28 и 29 слайдах нарисовано что-то странное. В начале лекции он говорит, что в реальности на одном ядре всё происходит последовательно, а на графиках нарисовано параллельное выполнение. Еще немного удивляют миллисекунды, я когда-то (в конце 0-ых) писал на С++ и счет шел на микросекунды. Даже в PHP миллисекунды появляются из-за работы с БД или по сети. Неужели в C# всё настолько грустно?
@@EshkinKot1980 ну и работа с сетью и бд в частности, это же блокировки сетевого ввода/вывода, это уровень ядра. Тут скорее от операционной системы зависит, чем от конкретного языка или платформы. Хотя может быть плохо написан провайдер бд, что тоже возможно.
Обожаю когда Сидристый в очередной раз рассказывает про многопоточность)))
Офигеть я тупой, потому что мне кажется что он очень сумбурно рассказывает и Непонятно
@@nikolaifedorov685 я по нескольку раз пересматриваю)))
А он могет. Спасибо
Ну на практике я бы проявлял здоровый скепсис к его советам, не зря же его Женя Пешков за volatile укусил.
В multithreading-е все-таки реализация сильно сложнее, чем это выглядит в теории.
ребята/коллеги, про волатайл - это всего-лишь указание компилятору/интерпретатору не использовать в оптимизации кода, при работе с этой переменной/членом всякие оптимизации, напримре, как копирование "нашей/данной" ячейки памяти в регистровую память. То есть - всегда нужно сначала "её" из ОЗУ получить, и побыренькому её заюзать, иначе полученное значение/value потеряет свой смысл и значимость. Так что... о волатайлах - не забывайте, хотя...
пример от си-пи-пишников - std::atomic - каков "великий" смысл данной конструкции?
Вы описываете ключевое слово volatile из C и C++.
В C# его смысл немного другой. См. секцию "14.5.4 Volatile fields" спецификации ECMA-334 (я использую шестую редакцию): операции чтения и записи над volatile полем имеют acquire/release семантику.
Интересно, что в C++ упомянутый вами std::atomic также позволяет гарантировать соблюдение похожей семантики, в отличие от ключевого слова volatile из того же C++.
@@fvnever ... на самом деле я больше писал, про атомик.
волатайл - это больше указание компилятору, чем самому си-пи-ю
а вот атомик-от-боол - это прикольно,
смысл, как от бывшего электронщика ускользает ( ну кроме совсем исключительных случаев).
@@vladlenbulatov1022 Я тут попытался написать ответ с парой ссылок, но Ютубу не нравятся такие комментарии, и он их постить отказывается, так что извините, на этот раз будет без пруфов.
atomic, как и другие атомики, нужен, чтобы иметь определённые гарантии при записи и чтения значения переменной (какие именно гарантии - в C++ можно задать аргументом при вызове методов store и load, например, ну и всякие там exchange, которые предоставляют доступ к более интересным сценариям).
Возможно, для электронщика ближе окажется тема протоколов когерентности кэшей в CPU - советую почитать на вики.
Также относительно несложно можно найти обсуждения по поводу связи между когерентностью кэшей и прикладным программированием - в частности, даже полностью прозрачный («когерентный») CPU кэш не позволяет легко реализовать тот же самый атомарный exchange. Поэтому атомик всё ещё может быть нужен, даже для bool.
Он говорит "ConfigureWait(false)" или что-то иное? 😮
Маст хэв для подготовки к собесам и для понимания
Маст хэв - это его лекции на clrium. А это для затравочки.
@@АлександрК-у6ю Спасибо, тут всё как-то скомкано, автор перескакивает с темы на тему, много слов паразитов. Реально понять можно только то, с чем уже имел дело. На 28 и 29 слайдах нарисовано что-то странное. В начале лекции он говорит, что в реальности на одном ядре всё происходит последовательно, а на графиках нарисовано параллельное выполнение.
Еще немного удивляют миллисекунды, я когда-то (в конце 0-ых) писал на С++ и счет шел на микросекунды. Даже в PHP миллисекунды появляются из-за работы с БД или по сети. Неужели в C# всё настолько грустно?
@@EshkinKot1980 на графиках всё правильно нарисовано, в один момент времени исполняется один поток
@@EshkinKot1980 ну и работа с сетью и бд в частности, это же блокировки сетевого ввода/вывода, это уровень ядра. Тут скорее от операционной системы зависит, чем от конкретного языка или платформы. Хотя может быть плохо написан провайдер бд, что тоже возможно.
@@АлександрК-у6юспасибо, посмотрим