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
👍1
🚀 BlockingCollection<T> в C#!
🔒 Всем, кто работает с многопоточными приложениями в .NET, знакома ситуация, когда методы вроде
💡 Что делает BlockingCollection?
-
- Предоставляет блокирующие методы
- Позволяет ограничить размер коллекции, блокируя добавление новых элементов при достижении предела.
🔧 Как использовать?
1️. Создайте экземпляр, указав тип коллекции и максимальный размер.
2️. Используйте
3️. Используйте
- По умолчанию используется
- Методы
🔄 Дополнительные возможности:
-
-
-
🔑 Ключ к многопоточной эффективности:
#Multithreading #ConcurrentCollections #DotNetCore #AsyncProgramming #CSharpProgramming #CodingLife #DeveloperTools #SoftwareEngineering #TechCommunity #ProgrammingTips #CodeNewbies #TechWorld #SoftwareDevelopment
🔒 Всем, кто работает с многопоточными приложениями в .NET, знакома ситуация, когда методы вроде
TryTake
возвращают false
на пустой коллекции. Часто бывает необходимо организовать ожидание, пока элемент не станет доступным. Для решения этой задачи в C# существует класс BlockingCollection<T>
.💡 Что делает BlockingCollection?
-
BlockingCollection<T>
оборачивает любую коллекцию, реализующую IProducerConsumerCollection<T>
.- Предоставляет блокирующие методы
Take
и Add
, удобные в многопоточной среде.- Позволяет ограничить размер коллекции, блокируя добавление новых элементов при достижении предела.
🔧 Как использовать?
1️. Создайте экземпляр, указав тип коллекции и максимальный размер.
2️. Используйте
Add
или TryAdd
для добавления элементов.3️. Используйте
Take
или TryTake
для извлечения элементов.- По умолчанию используется
ConcurrentQueue<T>
.- Методы
Add
и Take
могут блокироваться в зависимости от состояния коллекции.🔄 Дополнительные возможности:
-
GetConsumingEnumerable
предлагает элегантный способ потребления элементов в бесконечном цикле.-
CompleteAdding
закрывает коллекцию для добавления новых элементов.-
AddToAny
и TakeFromAny
позволяют работать сразу с несколькими блокирующими коллекциями.🔑 Ключ к многопоточной эффективности:
BlockingCollection<T>
идеально подходит для сценариев, где нужна гибкая и надежная синхронизация между производящими и потребляющими потоками.#Multithreading #ConcurrentCollections #DotNetCore #AsyncProgramming #CSharpProgramming #CodingLife #DeveloperTools #SoftwareEngineering #TechCommunity #ProgrammingTips #CodeNewbies #TechWorld #SoftwareDevelopment
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Параллельные коллекции. BlockingCollection<T>.
#Multithreading #ConcurrentCollections #DotNetCore #AsyncProgramming #CSharpProgramming #CodingLife #DeveloperTools #SoftwareEngineering #TechCommunity #ProgrammingTips #CodeNewbies #TechWorld #SoftwareDevelopment
#Multithreading #ConcurrentCollections #DotNetCore #AsyncProgramming #CSharpProgramming #CodingLife #DeveloperTools #SoftwareEngineering #TechCommunity #ProgrammingTips #CodeNewbies #TechWorld #SoftwareDevelopment
👍1
Очередь производителей/потребителей – структура, полезная как при параллельном программировании, так и в общих сценариях параллелизма. Ниже описаны основные аспекты ее работы.
• Очередь настраивается для описания элементов работы или данных, над которыми выполняется работа.
• Когда задача должна выполниться, она ставится в очередь, а вызывающий код занимается другой работой.
• Один или большее число рабочих потоков функционируют в фоновом режиме, извлекая и запуская элементы из очереди.
Очередь производителей/потребителей обеспечивает точный контроль над тем, сколько рабочих потоков выполняется за раз, что полезно для ограничения эксплуатации не только ЦП, но также и других ресурсов. Скажем, если задачи выполняют интенсивные операции дискового ввода-вывода, то можно ограничить параллелизм, не истощая операционную систему и другие приложения. На протяжении времени жизни очереди можно также динамически добавлять и удалять рабочие потоки. Пул потоков CLR сам представляет собой разновидность очереди производителей/потребителей, которая оптимизирована для кратко выполняющихся заданий с интенсивными вычислениями.
Очередь производителей/потребителей обычно хранит элементы данных, на которых выполняется (одна и та же) задача. Например, элементами данных могут быть имена файлов, а задача может осуществлять шифрование содержимого таких файлов. С другой стороны, применяя делегаты в качестве элементов, можно построить более универсальную очередь производителей/потребителей, где каждый элемент способен делать все что угодно.
Реализовать очередь производителей/потребителей можно, используя событие
#ParallelProgramming #ConcurrencyControl #ProducerConsumerQueue #ThreadManagement #CodingLife
• Очередь настраивается для описания элементов работы или данных, над которыми выполняется работа.
• Когда задача должна выполниться, она ставится в очередь, а вызывающий код занимается другой работой.
• Один или большее число рабочих потоков функционируют в фоновом режиме, извлекая и запуская элементы из очереди.
Очередь производителей/потребителей обеспечивает точный контроль над тем, сколько рабочих потоков выполняется за раз, что полезно для ограничения эксплуатации не только ЦП, но также и других ресурсов. Скажем, если задачи выполняют интенсивные операции дискового ввода-вывода, то можно ограничить параллелизм, не истощая операционную систему и другие приложения. На протяжении времени жизни очереди можно также динамически добавлять и удалять рабочие потоки. Пул потоков CLR сам представляет собой разновидность очереди производителей/потребителей, которая оптимизирована для кратко выполняющихся заданий с интенсивными вычислениями.
Очередь производителей/потребителей обычно хранит элементы данных, на которых выполняется (одна и та же) задача. Например, элементами данных могут быть имена файлов, а задача может осуществлять шифрование содержимого таких файлов. С другой стороны, применяя делегаты в качестве элементов, можно построить более универсальную очередь производителей/потребителей, где каждый элемент способен делать все что угодно.
Реализовать очередь производителей/потребителей можно, используя событие
AutoResetEvent
(а также впоследствии методы Wait
и Pulse
класса Monitor
). Тем не менее, написание очереди производителей/потребителей с нуля стало необязательным, т.к. большая часть функциональности предлагается классом BlockingCollection<T>
. На слайде продемонстрировано, как его задействовать.#ParallelProgramming #ConcurrencyControl #ProducerConsumerQueue #ThreadManagement #CodingLife
👍1
Media is too big
VIEW IN TELEGRAM
Параллельные коллекции. Реализация очереди производителей/потребителей.
#ParallelProgramming #ConcurrencyControl #ProducerConsumerQueue #ThreadManagement #CodingLife #SoftwareDevelopment #CodeOptimization #Multithreading #AsyncProgramming #TechCommunity #ComputerScience #DeveloperTools #CodingTips #ProgrammerLife #SystemDesign #ResourceManagement #TechInnovat
#ParallelProgramming #ConcurrencyControl #ProducerConsumerQueue #ThreadManagement #CodingLife #SoftwareDevelopment #CodeOptimization #Multithreading #AsyncProgramming #TechCommunity #ComputerScience #DeveloperTools #CodingTips #ProgrammerLife #SystemDesign #ResourceManagement #TechInnovat
👍1
C# 12 in a Nutshell: The Definitive Reference by Joseph Albahari
https://csharpcooking.github.io/theory/AlbahariCSharp12En.pdf
https://csharpcooking.github.io/theory/AlbahariCSharp12En.pdf
👍1
Media is too big
VIEW IN TELEGRAM
Параллельные коллекции: реализация очереди производителей/потребителей с использованием задач.
#ProducerConsumerQueue #ProgrammingTips #TaskManagement #CSharp #DotNet #ConcurrentProgramming #ThreadSafe #SoftwareDevelopment #CodingExamples #EnqueueMethod #AsyncAwait #TaskProgramming #ExceptionHandling #JobCancellation #TaskCompletion #DeveloperCommunity #CodeOptimization #CodingTips #ComputerScience #BackendDevelopment #Multithreading #ConcurrencyControl #CodeExecution #TechTips #CodingPractice #AlgorithmDesign #SoftwareEngineering #TaskControl #Technology #Innovation
#ProducerConsumerQueue #ProgrammingTips #TaskManagement #CSharp #DotNet #ConcurrentProgramming #ThreadSafe #SoftwareDevelopment #CodingExamples #EnqueueMethod #AsyncAwait #TaskProgramming #ExceptionHandling #JobCancellation #TaskCompletion #DeveloperCommunity #CodeOptimization #CodingTips #ComputerScience #BackendDevelopment #Multithreading #ConcurrencyControl #CodeExecution #TechTips #CodingPractice #AlgorithmDesign #SoftwareEngineering #TaskControl #Technology #Innovation
👍1
Параллельные коллекции | Параллельное программирование
https://youtu.be/VpgkBGA-98s
#ПараллельноеПрограммирование #ПараллельныеКоллекции
https://youtu.be/VpgkBGA-98s
#ПараллельноеПрограммирование #ПараллельныеКоллекции
YouTube
Параллельные коллекции | Параллельное программирование
В данном видео представлены основные моменты, связанные с параллельными коллекциями в C#:
- рассматриваются оптимизированные для многопоточной работы параллельные коллекции;
- изучается интерфейс IProducerConsumerCollection и реализующие его коллекции ConcurrentStack…
- рассматриваются оптимизированные для многопоточной работы параллельные коллекции;
- изучается интерфейс IProducerConsumerCollection и реализующие его коллекции ConcurrentStack…
👍1
Media is too big
VIEW IN TELEGRAM
МНОГОПОТОЧНАЯ ОБРАБОТКА
- Для чего нужен параллелизм?
- Безопасность к потокам в серверах приложений
#Многопоточность #Параллелизм #ThreadSafety #ServerProgramming #ConcurrentComputing #MultiThreading #ParallelProgramming #Coding #SoftwareEngineering #DeveloperLife #TechCommunity #CodeNewbie #BackendDevelopment #SystemArchitecture #PerformanceOptimization #Scalability #TechTalk #ProgrammingTips #SoftwareDevelopment #DevCommunity #TechInnovation #CodingForFuture #ProgrammerLife #TechWorld #ModernCoding #Efficiency #ServerSide
- Для чего нужен параллелизм?
- Безопасность к потокам в серверах приложений
#Многопоточность #Параллелизм #ThreadSafety #ServerProgramming #ConcurrentComputing #MultiThreading #ParallelProgramming #Coding #SoftwareEngineering #DeveloperLife #TechCommunity #CodeNewbie #BackendDevelopment #SystemArchitecture #PerformanceOptimization #Scalability #TechTalk #ProgrammingTips #SoftwareDevelopment #DevCommunity #TechInnovation #CodingForFuture #ProgrammerLife #TechWorld #ModernCoding #Efficiency #ServerSide
👍2
Приглашаем на предстоящую трансляцию для обсуждения параграфа "Многопоточная обработка" книги "Албахари Д. C# 9.0. Справочник. Полное описание языка". В рамках трансляции обсудим следующие темы:
- Создание потока
- Join и Sleep
- Блокирование
- Локальное или разделяемое состояние
- Блокировка и безопасность потоков
- Передача данных потоку
- Обработка исключений
- Потоки переднего плана или фоновые потоки
- Приоритет потока
- Передача сигналов
- Многопоточность в обогащенных клиентских приложениях
- Контексты синхронизации
- Пул потоков
Материал для предварительного ознакомления доступен по ссылке: https://csharpcooking.github.io/theory/AlbahariCSharp9Ru.pdf (см. страницы 628-644)
Дата и время трансляции: 20 марта, начало в 16:50.
Спикеры: Руслан Гибадуллин, Данил Гашигуллин.
Присоединяйтесь к нам, перейдя по ссылке: https://t.me/CSharpCooking?livestream=cfc8ebe8c5ef91e3d8
- Создание потока
- Join и Sleep
- Блокирование
- Локальное или разделяемое состояние
- Блокировка и безопасность потоков
- Передача данных потоку
- Обработка исключений
- Потоки переднего плана или фоновые потоки
- Приоритет потока
- Передача сигналов
- Многопоточность в обогащенных клиентских приложениях
- Контексты синхронизации
- Пул потоков
Материал для предварительного ознакомления доступен по ссылке: https://csharpcooking.github.io/theory/AlbahariCSharp9Ru.pdf (см. страницы 628-644)
Дата и время трансляции: 20 марта, начало в 16:50.
Спикеры: Руслан Гибадуллин, Данил Гашигуллин.
Присоединяйтесь к нам, перейдя по ссылке: https://t.me/CSharpCooking?livestream=cfc8ebe8c5ef91e3d8
👍3
Media is too big
VIEW IN TELEGRAM
Запись трансляции с обсуждением параграфа "Многопоточная обработка" книги "Албахари Д. C# 9.0. Справочник. Полное описание языка", прошедшей 20 марта 2024 г., включает детальный разбор следующих тем:
- Создание потока
- Join и Sleep
- Блокирование
- Локальное или разделяемое состояние
- Блокировка и безопасность потоков
- Передача данных потоку
- Обработка исключений
- Потоки переднего плана или фоновые потоки
- Приоритет потока
- Передача сигналов
- Многопоточность в обогащенных клиентских приложениях
- Контексты синхронизации
- Пул потоков
🙏 pay.cloudtips.ru/p/d19fd09d
- Создание потока
- Join и Sleep
- Блокирование
- Локальное или разделяемое состояние
- Блокировка и безопасность потоков
- Передача данных потоку
- Обработка исключений
- Потоки переднего плана или фоновые потоки
- Приоритет потока
- Передача сигналов
- Многопоточность в обогащенных клиентских приложениях
- Контексты синхронизации
- Пул потоков
🙏 pay.cloudtips.ru/p/d19fd09d
👍1
Приглашаем на предстоящую трансляцию для обсуждения параграфа "Задачи" книги "Албахари Д. C# 9.0. Справочник. Полное описание языка". В рамках трансляции обсудим следующие темы:
- Запуск задачи
- Возвращение значений
- Исключения
- Продолжение
- TaskCompletionSource
- Task.Delay
Материал для предварительного ознакомления доступен по ссылке: https://csharpcooking.github.io/theory/AlbahariCSharp9Ru.pdf (см. страницы 645-653)
Дата и время трансляции: 27 марта, начало в 16:50.
Спикеры: Руслан Гибадуллин, Данил Гашигуллин.
Присоединяйтесь к нам, перейдя по ссылке: https://t.me/CSharpCooking?livestream=7c672a10950bfe8865
- Запуск задачи
- Возвращение значений
- Исключения
- Продолжение
- TaskCompletionSource
- Task.Delay
Материал для предварительного ознакомления доступен по ссылке: https://csharpcooking.github.io/theory/AlbahariCSharp9Ru.pdf (см. страницы 645-653)
Дата и время трансляции: 27 марта, начало в 16:50.
Спикеры: Руслан Гибадуллин, Данил Гашигуллин.
Присоединяйтесь к нам, перейдя по ссылке: https://t.me/CSharpCooking?livestream=7c672a10950bfe8865
👍1
Media is too big
VIEW IN TELEGRAM
Запись трансляции с обсуждением параграфа "Задачи" книги "Албахари Д. C# 9.0. Справочник. Полное описание языка", прошедшей 27 марта 2024 г., включает детальный разбор следующих тем:
- Запуск задачи
- Возвращение значений
- Исключения
- Продолжение
- TaskCompletionSource
- Task.Delay
🙏 pay.cloudtips.ru/p/d19fd09d
- Запуск задачи
- Возвращение значений
- Исключения
- Продолжение
- TaskCompletionSource
- Task.Delay
🙏 pay.cloudtips.ru/p/d19fd09d
👍1
Приглашаем на предстоящую трансляцию для обсуждения параграфа "Принципы асинхронности" книги "Албахари Д. C# 9.0. Справочник. Полное описание языка". В рамках трансляции обсудим следующие темы:
- Сравнение синхронных и асинхронных операций
- Что собой представляет асинхронное программирование
- Асинхронное программирование и продолжение
- Важность языковой поддержки
Материал для предварительного ознакомления доступен по ссылке: https://csharpcooking.github.io/theory/AlbahariCSharp9Ru.pdf (см. страницы 654-659)
Дата и время трансляции: 3 апреля, начало в 16:50.
Спикер: Руслан Гибадуллин.
Присоединяйтесь к нам, перейдя по ссылке: https://t.me/CSharpCooking?livestream=01f2f7d6caca4c5799
- Сравнение синхронных и асинхронных операций
- Что собой представляет асинхронное программирование
- Асинхронное программирование и продолжение
- Важность языковой поддержки
Материал для предварительного ознакомления доступен по ссылке: https://csharpcooking.github.io/theory/AlbahariCSharp9Ru.pdf (см. страницы 654-659)
Дата и время трансляции: 3 апреля, начало в 16:50.
Спикер: Руслан Гибадуллин.
Присоединяйтесь к нам, перейдя по ссылке: https://t.me/CSharpCooking?livestream=01f2f7d6caca4c5799
👍1
Media is too big
VIEW IN TELEGRAM
Запись трансляции с обсуждением параграфа "Принципы асинхронности" книги "Албахари Д. C# 9.0. Справочник. Полное описание языка", прошедшей 3 апреля 2024 г., включает детальный разбор следующих тем:
- Сравнение синхронных и асинхронных операций
- Что собой представляет асинхронное программирование
- Асинхронное программирование и продолжение
- Важность языковой поддержки
🙏 pay.cloudtips.ru/p/d19fd09d
- Сравнение синхронных и асинхронных операций
- Что собой представляет асинхронное программирование
- Асинхронное программирование и продолжение
- Важность языковой поддержки
🙏 pay.cloudtips.ru/p/d19fd09d
👍5
Приглашаем на предстоящую трансляцию для обсуждения параграфа "Асинхронные функции в C#" книги "Албахари Д. C# 9.0. Справочник. Полное описание языка". В рамках трансляции обсудим следующие темы:
- Ожидание
- Написание асинхронных функций
- Асинхронные лямбда-выражения
- Асинхронные потоки
- Асинхронные методы в WinRT
- Асинхронность и контексты синхронизации
- Оптимизация
Материал для предварительного ознакомления доступен по ссылке: https://csharpcooking.github.io/theory/AlbahariCSharp9Ru.pdf (см. страницы 659-679)
Дата и время трансляции: 10 апреля, начало в 16:50.
Спикер: Руслан Гибадуллин, Данил Гашигуллин.
Присоединяйтесь к нам, перейдя по ссылке: https://t.me/CSharpCooking?livestream=a24a3ee53387452197
- Ожидание
- Написание асинхронных функций
- Асинхронные лямбда-выражения
- Асинхронные потоки
- Асинхронные методы в WinRT
- Асинхронность и контексты синхронизации
- Оптимизация
Материал для предварительного ознакомления доступен по ссылке: https://csharpcooking.github.io/theory/AlbahariCSharp9Ru.pdf (см. страницы 659-679)
Дата и время трансляции: 10 апреля, начало в 16:50.
Спикер: Руслан Гибадуллин, Данил Гашигуллин.
Присоединяйтесь к нам, перейдя по ссылке: https://t.me/CSharpCooking?livestream=a24a3ee53387452197
👍4
Media is too big
VIEW IN TELEGRAM
Запись трансляции с обсуждением параграфа "Асинхронные функции в C#" книги "Албахари Д. C# 9.0. Справочник. Полное описание языка", прошедшей 10 апреля 2024 г., включает детальный разбор следующих тем:
- Ожидание
- Написание асинхронных функций
- Асинхронные лямбда-выражения
- Асинхронные потоки
- Асинхронные методы в WinRT
- Асинхронность и контексты синхронизации
- Оптимизация
🙏 pay.cloudtips.ru/p/d19fd09d
- Ожидание
- Написание асинхронных функций
- Асинхронные лямбда-выражения
- Асинхронные потоки
- Асинхронные методы в WinRT
- Асинхронность и контексты синхронизации
- Оптимизация
🙏 pay.cloudtips.ru/p/d19fd09d
👍1