Ошибки и проблемы использования многопоточности в .NET. Платформа .NET предоставляет множество готовых примитивов синхронизации и потокобезопасных коллекций. Если при разработке приложения нужно реализовать, например, потокобезопасный кэш или очередь запросов — обычно используются эти готовые решения, иногда сразу несколько. В отдельных случаях это приводит к проблемам с производительностью: долгим ожиданием на блокировках, избыточному потреблению памяти и долгим сборкам мусора. Эти проблемы можно решить, если учесть, что стандартные решения сделаны достаточно общими — они могут иметь избыточный в наших сценариях оверхед. Соответственно, можно написать, например, собственную эффективную потокобезопасную коллекцию для конкретного случая. В докладе рассмотрим несколько примеров, когда использование средств из стандартной библиотеки .NET (Task.Delay, SemaphoreSlim, ConcurrentDictionary) привело к просадкам производительности, и поговорим о решениях, заточенных под конкретные задачи и лишённых этих недостатков. Также заглянем в internal-часть дотнета и посмотрим на использующиеся там подходы.
Многие что-то слышали про основной поток и о том, что его нельзя блокировать. Но что это на самом деле такое? Если есть основной, значит, есть и второстепенные? Попробуем разобраться и не запутаться.
Amongst all the platforms for app development, the web is arguably the only one that does not make good use of threading. On the web, the main thread has a lot of responsibilities, and we keep adding…
Мы поговорим о том, как в Ruby работают с параллелизмом и конкурентностью: о давно известных вещах (процессы и потоки) и о новых (ракторы и асинхронные файберы).
During this talk, we'll cover the theory and practical implementation behind the most common patterns in modern multi-threaded programming. How our everyday libraries and frameworks optimize the use …