Описание тега multithreading
Многопоточность - это распространенная модель для реализации SM в многоядерных машинах, где потоки совместно используют память через общие переменные. В этой модели параллельного программирования процессор может создавать несколько потоков, которые будут выполняться параллельно. Каждый поток имеет свой собственный стек, переменные и идентификатор, считающийся частным состоянием. Для каждого потока существует уникальная куча, общая для всех, которая считается общей памятью.
Чтобы можно было наиболее эффективно и безопасно разделить объем работы на несколько параллельных потоков выполнения, необходимо решить ряд критических областей.
- Планирование: убедитесь, что рабочие задачи могут выполняться независимо и эффективно (например, предотвращение взаимоблокировок / живых блокировок)
- Публикация: убедитесь, что данные, измененные в одном потоке, видны только другим, как ожидалось
- Синхронизация: убедитесь, что критические области защищены от множественных одновременных обновлений, вызывающих потерю / повреждение данных.
Основополагающий принцип параллельной обработки - закон Амдала ( график). Этот закон регулирует уменьшение пропускной способности, которое может быть достигнуто за счет большего числа одновременно работающих процессоров / ядер. Следовательно, общая цель многопоточности - минимизировать объем последовательного выполнения (исключительная блокировка) в любой параллельной системе.
Часто задаваемые вопросы
- В чем разница между атомарными и неатомарными атрибутами?
- В чем разница между Invoke() и BeginInvoke()
- "реализует Runnable" против "расширяет поток" в Java
- Разница между wait() и sleep()
- В чем разница между различными вариантами синхронизации потоков в C#?
- В чем разница между процессом и потоком?
- Что подразумевается под "потокобезопасным" кодом?
- Что такое состояние гонки?
- Что нужно знать при погружении в многопоточное программирование на C++
- Как мне выполнить модульное тестирование многопоточного кода?
- Что такое поток демона в Java?
Книги
- "Threading in C#" (бесплатная электронная книга)
- "Java Concurrency на практике"
- "Параллелизм C++ в действии"
- "Принципы параллельного и распределенного программирования"
- "Параллельное программирование в Windows"
- Потоки Java, Скотт Окс, Генри Вонг
- Искусство многопроцессорного программирования
Дополнительная информация:
- Многопоточность (компьютерная архитектура) (Википедия)
- Многопоточность (программное обеспечение) (Википедия)
Связанные теги
параллелизм потокобезопасность pthreads threadpool волокна сопрограмм зеленые потоки легкие процессы lwt