ConcurrentXXX Thread-Safe Collections
От: vvv848165@ya.ru  
Дата: 03.10.19 12:52
Оценка:
https://docs.microsoft.com/en-us/dotnet/standard/collections/thread-safe/
1)Почему все потокобезопастные коллекции предаставляют извлечение только по одному элементу (почему нельзя пачкой прочитать и удалить за раз???)? (For как я понял не удаляет)?
2)На заборе написано что они без блокировок и реализованны через (SpinLock and SpinWait)... Но SpinLock and SpinWait — это блокировка поуда недоступно — чем отличается от блокировок на простом мутексе? Ничем?
Re: ConcurrentXXX Thread-Safe Collections
От: Ночной Смотрящий Россия  
Дата: 03.10.19 12:57
Оценка: 4 (2) +1
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>1)Почему все потокобезопастные коллекции предаставляют извлечение только по одному элементу (почему нельзя пачкой прочитать и удалить за раз???)? (For как я понял не удаляет)?


Потому что они не просто потокобезопасные, а, по возможности, lock free. А групповые операции на lock free плохо ложаться.

VYR>2)На заборе написано что они без блокировок и реализованны через (SpinLock and SpinWait)... Но SpinLock and SpinWait — это блокировка поуда недоступно — чем отличается от блокировок на простом мутексе? Ничем?


Зависит от коллекции. Dictionary не lock free (точнее не полностью, на создании бакета локальная блокировка), очередь, стек и список — lock free.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: ConcurrentXXX Thread-Safe Collections
От: vvv848165@ya.ru  
Дата: 04.10.19 05:38
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:
НС> lock free
читал в инете про это не понял чем в принципе отличается от обычных мутексов (ведь они тоже основаны на блокировке шины данных)???

фьютекс, как я понял, — тоже неахти — почти всегда будет использовать очередь из ядра (которая на мутексе наверное)
Отредактировано 04.10.2019 5:48 vvv848165@ya.ru . Предыдущая версия .
Re[3]: ConcurrentXXX Thread-Safe Collections
От: RushDevion Россия  
Дата: 04.10.19 07:29
Оценка: +1
НС>> lock free
VYR>читал в инете про это не понял чем в принципе отличается от обычных мутексов (ведь они тоже основаны на блокировке шины данных)???
Потому что блокировка на мьютексе (семафоре, евенте) приводит к context switch блокируемого потока. Т.е. ОС останавливает поток, сохраняет его состояние (содержимое регистров процессора) в память, выбирает на исполнение другой поток, загружает его контекст из памяти, запускает на выполнение.
А при spinwait'e этого не происходит. По ок крутит цикл, периодически проверяя, не наступило ли условие для разблокировки.
Re[4]: ConcurrentXXX Thread-Safe Collections
От: vvv848165@ya.ru  
Дата: 04.10.19 08:26
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>ОС останавливает поток, сохраняет его состояние (содержимое регистров процессора) в память, выбирает на исполнение другой поток, загружает его контекст из памяти, запускает на выполнение.

Дак это по-любому происходит много раз за секунду — защищённый режим всётаки — причем даже без мутексов и когда задачи не связаны между собой — поцессор так сделан...
RD>А при spinwait'e этого не происходит. По ок крутит цикл, периодически проверяя, не наступило ли условие для разблокировки.
задачи переключаются всегда https://wasm.in/blogs/category/zaschischennyj-rezhim.20/ особенно при ожидании
Re[3]: ConcurrentXXX Thread-Safe Collections
От: Ночной Смотрящий Россия  
Дата: 04.10.19 10:17
Оценка: 3 (1) +1
Здравствуйте, vvv848165@ya.ru, Вы писали:

НС>> lock free

VYR>читал в инете про это не понял чем в принципе отличается от обычных мутексов (ведь они тоже основаны на блокировке шины данных)???

lock free использует не блокировки, а retry для отслеживания конфиликтов. В оптимистичном сценарии это дает почти нулевой оверхед.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[5]: ConcurrentXXX Thread-Safe Collections
От: Ночной Смотрящий Россия  
Дата: 04.10.19 10:17
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:

RD>>ОС останавливает поток, сохраняет его состояние (содержимое регистров процессора) в память, выбирает на исполнение другой поток, загружает его контекст из памяти, запускает на выполнение.

VYR>Дак это по-любому происходит много раз за секунду — защищённый режим всётаки

Для современного процессора 1/20 секунды это вечность. Спинлоки обычно на много порядков короче. Если же у тебя блокировки сопоставимы по длительности с переключением потока, то да, от спинлоков только один вред.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: ConcurrentXXX Thread-Safe Collections
От: vvv848165@ya.ru  
Дата: 04.10.19 10:22
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>lock free использует не блокировки, а retry для отслеживания конфиликтов. В оптимистичном сценарии это дает почти нулевой оверхед.


retry!!! что это такое и где можно почитать (это x86 команда?)?
Re[5]: ConcurrentXXX Thread-Safe Collections
От: Ночной Смотрящий Россия  
Дата: 04.10.19 10:36
Оценка: 3 (1)
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>retry!!! что это такое и где можно почитать (это x86 команда?)?


Почти.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[6]: ConcurrentXXX Thread-Safe Collections
От: vvv848165@ya.ru  
Дата: 04.10.19 12:18
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, vvv848165@ya.ru, Вы писали:


VYR>>retry!!! что это такое и где можно почитать (это x86 команда?)?


НС>Почти.

Ну и почему ты решил что там без мутексов обошлось?
Re[7]: ConcurrentXXX Thread-Safe Collections
От: Ночной Смотрящий Россия  
Дата: 04.10.19 12:21
Оценка: 3 (1) +1
Здравствуйте, vvv848165@ya.ru, Вы писали:

НС>>Почти.

VYR>Ну и почему ты решил что там без мутексов обошлось?

https://devblogs.microsoft.com/oldnewthing/20130913-00/?p=3243
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: ConcurrentXXX Thread-Safe Collections
От: vvv848165@ya.ru  
Дата: 04.10.19 12:44
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, vvv848165@ya.ru, Вы писали:


НС>>>Почти.

VYR>>Ну и почему ты решил что там без мутексов обошлось?

НС>https://devblogs.microsoft.com/oldnewthing/20130913-00/?p=3243

XCHG opcode https://www.felixcloutier.com/x86/xchg Действительно просветил!!!
Re[9]: ConcurrentXXX Thread-Safe Collections
От: Ночной Смотрящий Россия  
Дата: 04.10.19 12:51
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>XCHG opcode https://www.felixcloutier.com/x86/xchg


Там еще префикс lock используется для memory barrier
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: ConcurrentXXX Thread-Safe Collections
От: Слава  
Дата: 04.10.19 12:53
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>1)Почему все потокобезопастные коллекции предаставляют извлечение только по одному элементу (почему нельзя пачкой прочитать и удалить за раз???)? (For как я понял не удаляет)?


Отвечаю на весь тред разом.
1) Почитайте уже чего-нибудь конкретного про многопоточность и синхронизацию, например Рихтера.
2) Для вставки множества элементов наверняка есть сторонние библиотеки, хотя этого добра больше для Java, там у них и Guava есть, и ещё всякое.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.