Помогите прояснить термины. Многопоточность, конкурентность, т.д
Смотрел видео и читал статьи, но непонятки остались, правильно ли я все понял. поправьте меня пожалуйста, если я не прав.
Синхронность - поток блокируется на время, пока выполняется задача, ожидая её выполнения.
Асинхронность - поток не блокируется, начиная задачу, и передавая коллбек. Тут же переключается обратно на другие задачи. Когда отрабатывает коллбэк - снова берется за начатую ранее задачу.
Многопоточность - неважно, сколько ядер у процессора, важно то, что задача будет исполняться на нескольких потоках.
Если ядро одно, то это будет конкурентность. Конкурентность, это когда потоки "конкурируют" за время работы процессора и он постоянно переключает их, чтобы каждый из потоков по очереди делал свою задачу. Время отведённое каждому потоку на выполнение не обязательно равное. Потоки НЕ выполняются одновременно.
Если ядер у машины несколько - тогда помимо конкурентности доступен параллелизм - можно одновременно исполнять несколько задач, каждой задаче по потоку, например.
Есть также микс конкурентности и параллелизма, т.е. когда на нескольких ядрах по несколько потоков, и каждый из потоков на своём ядре работает с другим потоком на своем же ядре конкурентно.
Получается и конкурентность и параллелизм можно назвать многопоточностью.
Также слышал, что то, что я назвал "Параллелизмом" - это называется параллельным исполнением, а параллелизм - разбиение большой задачи на маленькие подзадачи, каждая из которых выполняется на своём потоке.