This media is not supported in your browser
VIEW IN TELEGRAM
Параллельные коллекции.
#dotNET #ConcurrentCollections #Multithreading #SystemCollections #ConcurrentStack #ConcurrentQueue #ConcurrentBag #ConcurrentDictionary #ParallelProgramming #ThreadSafety #PerformanceMatters #ProgrammingTips #Synchronization #DataStructures #LinkedLists #CodeOptimization #TechInsights #SoftwareDevelopment #ProgrammingKnowledge #MemoryEfficiency #ModernCoding
#dotNET #ConcurrentCollections #Multithreading #SystemCollections #ConcurrentStack #ConcurrentQueue #ConcurrentBag #ConcurrentDictionary #ParallelProgramming #ThreadSafety #PerformanceMatters #ProgrammingTips #Synchronization #DataStructures #LinkedLists #CodeOptimization #TechInsights #SoftwareDevelopment #ProgrammingKnowledge #MemoryEfficiency #ModernCoding
🔥
✅ Работает как связанный список связанных списков.
✅ Метод
✅ Параллельные пакеты идеальны, когда количество вызовов
🔍 Внутренняя кухня:
- Каждый поток имеет свой закрытый список.
- Извлечение происходит либо с "головы" своего списка, либо достигается "воровством" с "хвоста" другого.
📌 Важные моменты реализации:
- если поток добавляет элемент в свой закрытый список с числом элементов меньше двух, то накладывается блокировка на список, так как другой поток в это время может забирать данные текущего потока (stealing thread);
- если поток забирает элемент закрытого списка другого потока, то он забирает его не с "головы", а с "хвоста", то есть если в списке более двух элементов, то поток может заимствовать элемент без блокировки данного списка (в таком случае невозможно "состояние гонки", так как между добавляемым и забираемым элементом есть как минимум один промежуточный).
#ConcurrentBag #Multithreading #ParallelProgramming #ConcurrentCollections #LockFree #ThreadSafety #ProgrammingTips #DataStructures #Concurrency #ParallelQueue #ParallelStack #AddMethod #TakeMethod #ThreadStealing #RaceCondition #LinkedLists
ConcurrentBag
в действии!✅ Работает как связанный список связанных списков.
✅ Метод
Add
пакета не допускает почти никаких состязаний, когда вызывается многими потоками одновременно.✅ Параллельные пакеты идеальны, когда количество вызовов
Add
и Таке
сбалансировано в рамках потока.🔍 Внутренняя кухня:
- Каждый поток имеет свой закрытый список.
- Извлечение происходит либо с "головы" своего списка, либо достигается "воровством" с "хвоста" другого.
📌 Важные моменты реализации:
- если поток добавляет элемент в свой закрытый список с числом элементов меньше двух, то накладывается блокировка на список, так как другой поток в это время может забирать данные текущего потока (stealing thread);
- если поток забирает элемент закрытого списка другого потока, то он забирает его не с "головы", а с "хвоста", то есть если в списке более двух элементов, то поток может заимствовать элемент без блокировки данного списка (в таком случае невозможно "состояние гонки", так как между добавляемым и забираемым элементом есть как минимум один промежуточный).
#ConcurrentBag #Multithreading #ParallelProgramming #ConcurrentCollections #LockFree #ThreadSafety #ProgrammingTips #DataStructures #Concurrency #ParallelQueue #ParallelStack #AddMethod #TakeMethod #ThreadStealing #RaceCondition #LinkedLists
Media is too big
VIEW IN TELEGRAM
Параллельные коллекции. ConcurrentBag<T>.
Демонстрационный код программы: http://share.linqpad.net/36xbvm.linq
#ConcurrentBag #Multithreading #ParallelProgramming #ConcurrentCollections #LockFree #ThreadSafety #ProgrammingTips #DataStructures #Concurrency #ParallelQueue #ParallelStack #AddMethod #TakeMethod #ThreadStealing #RaceCondition #LinkedLists
Демонстрационный код программы: http://share.linqpad.net/36xbvm.linq
#ConcurrentBag #Multithreading #ParallelProgramming #ConcurrentCollections #LockFree #ThreadSafety #ProgrammingTips #DataStructures #Concurrency #ParallelQueue #ParallelStack #AddMethod #TakeMethod #ThreadStealing #RaceCondition #LinkedLists