Главная arrow С++ (часть 3) arrow Что такое многопоточность?

Что такое многопоточность?

Сначала нужно точно определить, что означает термин "многопоточность" (multithreading). Многопоточность — это специализированная форма многозадачности (multitasking). В основном, выделяют два типа многозадачности: основанную на процессах (process-based) и основанную на потоках (thread-based). По сути, процесс (process) — это выполняющаяся программа. Таким образом, основанная на процессах многозадачность — средство, позволяющее вашему компьютеру выполнять несколько программ одновременно. Например, основанная на процессах многозадачность предоставляет вам возможность форматировать текст в текстовом редакторе и в то же время, например, работать с электронной таблицей или искать информацию в Интернете. В многозадачности, основанной на процессах, программа считается мельчайшей единицей кода, которой может управлять планировщик (scheduler).
Лоток (thread) — это управляемая единица исполняемого кода. Название позаимствовано у концепции "потока выполнения" (thread of execution). В многозадачной среде, основанной на потоках, у всех процессов обязательно есть один поток, но их может быть и больше. Это означает, что в одной программе могут выполняться несколько задач одновременно. Например, текстовый редактор может форматировать текст во время печати, пока эти два действия выполняются в отдельных потоках. Отличия основанной на процессах и многопоточной многозадачности можно сформулировать следующим образом: первая поддерживает одновременное выполнение нескольких программ, а вторая имеет дело с одновременным выполнением разных фрагментов одной и той же программы.
Возвращаясь к предыдущим рассуждениям, следует отметить, что истинное одновременное выполнение возможно в мультипроцессорной системе, каждый процесс или поток в которой получают неограниченное время доступа к процессору. В однопроцессорных системах, составляющих подавляющее большинство'парка используемых сегодня систем, возможно только совместное выполнение (simultaneous execution). В однопроцессорной системе каждый процесс или поток получает порцию процессорного времени, величина которой определяется несколькими факторами, включая приоритет процесса или потока. Хотя на большинстве компьютеров истинно одновременное выполнение невозможно, разрабатывая программу, вы должны считать его реальностью. Это необходимо, так как вы не знаете, в каком порядке будут выполняться отдельные потоки и не повторится ли одна и та же последовательность дважды. Следовательно, лучШе программировать, предполагая, что одновременное выполнение потоков действительно существует.