
Привет, Хаброжители! Асинхронные и многопоточные программы могут выполнять несколько задач одновременно, не теряя скорости или надежности. Но правильная организация параллельного выполнения может вызвать затруднения даже у опытных разработчиков. Эта практическая книга научит вас создавать параллельные приложения на C#, работающие с максимальной скоростью и не имеющие взаимоблокировок и других проблем синхронизации, которые ухудшают производительность и требуют огромных усилий для их обнаружения.
«C# Concurrency» помогает получить полное представление об особенностях многопоточности и асинхронного программирования. В ней особое внимание уделено практическому использованию операторов async/await в C# для упрощения асинхронных задач. Вы научитесь избегать распространенных ошибок, обходить классические проблемы многопоточности, такие как состояния взаимоблокировки и гонки, а также узнаете о многих сложных нюансах управления потоками и использования потокобезопасных коллекций.
Что внутри книги?
Многопоточность в .NET и механизмы асинхронного программирования.
Когда следует и когда не следует использовать методы параллельного выполнения.
Многочисленные примеры использования async/await.
Для опытных программистов на C#. Знание асинхронного программирования не требуется.
Кому адресована эта книга?
Эта книга адресована всем разработчикам на C#, желающим получить дополнительные знания о многопоточном и асинхронном программировании. Информация в этой книге применима к любой версии .NET, .NET Core и .NET Framework, выпущенной после 2012 года, а также к Windows и Linux (но только для .NET Core и .NET 5 и более поздних версий, потому что более ранние версии не поддерживались в Linux).
Основное внимание в издании уделяется разработке серверного программного кода, но кое-где затрагиваются также вопросы, касающиеся разработки приложений с графическим интерфейсом.
Перед вами — русскоязычная версия книги, посвящённой многопоточности и асинхронности в .NET. Темы, поднятые здесь, подробно раскрывают, почему так важно грамотно использовать механизмы потоков и асинхронности для ускорения ваших программ, а также помогают избежать распространённых ошибок. В нашем мире повсеместной цифровизации и бесконечно растущих нагрузок, когда приложения должны обрабатывать тысячи и миллионы запросов в секунду, эта книга как никогда актуальна.
Адаптация этого труда на русский язык — результат совместной работы команды энтузиастов, которые постарались не только локализовать книгу, но и сохранить техническую точность, избегая двусмысленности в формулировках. Мы стремились преодолеть языковой барьер и сделать информацию доступной для всех русскоязычных разработчиков, так или иначе связанных с .NET.
Книга раскрывает не только TPL, взаимодействие с потоками и async/await, но и современные Frozen Collections. Мы постарались максимально сохранить, а где-то и расширить контекст рассматриваемых вопросов, чтобы улучшить ваш читательский опыт.
Мы надеемся, что эта книга станет для вас ценным ресурсом — будь вы начинающий разработчик в процессе знакомства с concurrency или опытный инженер в поисках глубоких знаний и понимания этой области .NET.
- Российское сообщество .NET разработчиков DotNetRu
Об авторе
Нир Добовицки (Nir Dobovizki) — архитектор программного обеспечения и старший консультант. Занимается разработкой параллельных и асинхронных систем (в основном для высокопроизводительных серверов) с конца 1990-х. Хорошо знаком с языками, компилирующимися в машинный код, а с момента появления .NET 1.1 в 2003 году использует .NET и язык C#. Работал с несколькими компаниями в медицинской, оборонной и промышленной отраслях, которым помогал решать проблемы, возникающие из-за неправильного использования многопоточного и асинхронного программирования.
Структура издания
Эта книга состоит из двух частей, которые разбиты на 14 глав.
Часть I охватывает основы многопоточности и async/await в C#:
глава 1 знакомит с понятиями и терминологией многопоточного и асинхронного программирования;
глава 2 посвящена методам, которые использует компилятор .NET для реализации расширенной функциональности;
глава 3 — это глубокое погружение в работу async/await;
глава 4 объясняет суть многопоточности;
глава 5 связывает вместе все, о чем рассказывалось в главах 3 и 4, и демонстрирует связь async/await и многопоточности;
глава 6 рассказывает о том, когда следует использовать операторы async/await, потому что сам факт возможности их использования не означает, что они должны использоваться везде;
глава 7 завершает первую часть описанием распространенных ошибок в многопоточном программировании и, что еще важнее, приемов, помогающих их избежать.
Часть II посвящена практическому использованию информации, которую вы узнали в част и I:
глава 8 рассказывает об обработке данных в фоновом режиме;
глава 9 посвящена прерыванию обработки в фоновом режиме;
глава 10 учит создавать сложные асинхронные компоненты, которые делают больше, чем просто объединяют встроенные асинхронные операции;
в главе 11 обсуждаются продвинутые варианты использования async/await и потоков;
глава 12 поможет устранить проблемы с исключениями в асинхронном коде;
глава 13 посвящена потокобезопасным коллекциям;
глава 14 показывает, как создавать классы, работающие подобно асинхронным коллекциям
Ознакомиться с оглавлением





Полистать отрывок











Приобрести книгу «C# Concurrency. Асинхронное программирование и многопоточность» можно на нашем сайте.
По факту оплаты бумажной версии книги на e‑mail высылается электронная книга.
Для Хаброжителей скидка 25% по купону — Concurrency
juray
Для этого принципиально нужно, чтобы каждый поток выполнялся на отдельном физическом процессоре (ядре). При выполнении на одном (хоть при вытесняющей, хоть при кооперативной многозадачности) - неизбежно, что во время когда один из потоков выполняется, остальные простаивают. Более того, добавляются затраты на переключение конекста (и чем чаще переключение, тем суммарные затраты выше).
И за рамки этого ограничения не прыгнешь. Так что скорость неизбежно теряется (по сравнению с выполнением одной задачи). Но поскольку всегда есть шанс потерять скорость еще больше из-за неудачного кода - то советы, как этого избежать, конечно, полезны.
0xBE000ACE
Не совсем так. IOCP на Windows и epoll для Linux очень даже сокращают накладные расходы для современных процессором (20+ лет, по крайней мере).