Skip to content

Latest commit

 

History

History
24 lines (15 loc) · 3.36 KB

first_parallel.md

File metadata and controls

24 lines (15 loc) · 3.36 KB

Еще один стартово - (в)водный мануальчик.

Первое - на вопрос "а давайте поговорим о многопоточности" хорошим ответом будет встречный вопрос: "Вы имеете ввиду concurrency или parallelism?". Разница проста - второе про организацию работы таким образом, чтобы разные задачи выполнялись разными ядрами (или даже клиентами), а первое - про преодоление проблем, которые могут возникнуть из-за синхронизации совместной работы разных ядер/клиентов.

Если более снаружи:

  1. параллелизм - это про дизайн, а concurrency - про детали реализации.
  2. параллелизм - это то, что мы хотим получить, а concurrency- то, от чего хотим по возможности избавиться.

Общий подход к дизайну параллелизма - смотрим на таблицу ниже, смотрим, какими сущностями мы можем обойтись на стадии дизайна, по возможности минимизируем, инкапсулируем и сводим к примитивам сущности из 4 и 5 строк.

Редактируется Читается Оценка Проблемы
константный только создателем 0.2 от злоупотребления неизменяемыми данными можно поймать оверхед по памяти или её излишнюю фрагментацию
константный несколькими потоками 0.1 как бы всё не было надёжно, чем меньше межпоточного взаимодействия - тем лучше
только создателем только создателем 0 Достоинства-максимум степеней свободы
только создателем несколькими потоками 1 Возможно неконсистентное чтение
несколькими потоками несколькими потоками 100 огромное количество возможных проблем

(дополнение - если производительность менее важна, чем надёжность и ошибкоустойчивость кода, поменяйте оценки первой и третьей строки).

(продолжение следует)