|
3 | 3 | # Многопоточность |
4 | 4 | + [Расскажите о модели памяти Java?](#Расскажите-о-модели-памяти-java) |
5 | 5 | + [Что такое «потокобезопасность»?](#Что-такое-потокобезопасность) |
| 6 | ++ [В чём разница между _«конкуренцией»_ и _«параллелизмом»_?](#В-чём-разница-между-конкуренцией-и-параллелизмом) |
6 | 7 | + [Что такое _«кооперативная многозадачность»_? Какой тип многозадачности использует Java? Чем обусловлен этот выбор?](#Что-такое-кооперативная-многозадачность-Какой-тип-многозадачности-использует-java-Чем-обусловлен-этот-выбор) |
7 | 8 | + [Что такое _ordering_, _as-if-serial semantics_, _sequential consistency_, _visibility_, _atomicity_, _happens-before_, _mutual exclusion_, _safe publication_?](#Что-такое-ordering-as-if-serial-semantics-sequential-consistency-visibility-atomicity-happens-before-mutual-exclusion-safe-publication) |
8 | 9 | + [Чем отличается процесс от потока?](#Чем-отличается-процесс-от-потока) |
@@ -117,6 +118,23 @@ _Reordering (переупорядочивание)_. Для увеличения |
117 | 118 |
|
118 | 119 | [к оглавлению](#Многопоточность) |
119 | 120 |
|
| 121 | +## В чём разница между _«конкуренцией»_ и _«параллелизмом»_? |
| 122 | +Конкуренция — это способ одновременного решения множества задач. |
| 123 | + |
| 124 | +Признаки: |
| 125 | + |
| 126 | ++ Наличие нескольких потоков управления (например _Thread_ в Java, _корутина_ в Kotlin), если поток управления один, то конкурентного выполнения быть не может |
| 127 | ++ Недетерминированный результат выполнения. Результат зависит от случайных событий, реализации и того как была проведена синхронизация. Даже если каждый поток полностью детерминированный, итоговый результат будет недетерминированным |
| 128 | + |
| 129 | +Параллелизм — это способ выполнения разных частей одной задачи. |
| 130 | + |
| 131 | +Признаки: |
| 132 | + |
| 133 | ++ Необязательно имеет несколько потоков управления |
| 134 | ++ Может приводить к детерминированному результату, так, например, результат умножения каждого элемента массива на число, не изменится, если умножать его по частям параллельно. |
| 135 | + |
| 136 | +[к оглавлению](#Многопоточность) |
| 137 | + |
120 | 138 | ## Что такое _«кооперативная многозадачность»_? Какой тип многозадачности использует Java? Чем обусловлен этот выбор? |
121 | 139 |
|
122 | 140 | __Кооперативная многозадачность__ - это способ деления процессорного времени между потоками, при котором каждый поток обязан отдавать управление следующему добровольно. |
|
0 commit comments