Skip to content

Latest commit

 

History

History
28 lines (24 loc) · 2.47 KB

Lecture 14.md

File metadata and controls

28 lines (24 loc) · 2.47 KB


Map, reduce, filter

Отлично распараллеливается и некоторые задачи сводятся к этим

Используйте

	std::transform - map
	std::copy_if / remove_if - filter

Во что может упереться распараллеливание?

  1. Memory bund-width (пропускная способность памяти, на серверных процах может быть неверно)
  2. Caches (кэши проца)
  3. (Hyper-threading) execution units
  4. Power usage (проц считает -> нагревается)
  5. Sharing (если запустили на разных ядрах, то у каждых отдельных ядер фактически свой mutex на кэш, из-за чего обращение к переменной, которая в кэше другого ядра происходит по времени как обращение к просто памяти)
  6. False sharing (как sharing, но когда обращение не к одному объекту, а к объектам в одной кэш линии (процессоры синхронизируют кэш линии))

Альтернативы потокам

Если все что вам нужно - это ждать, то может быть потоки не лучшее решение

Message loop
Все события помещаются в некую “очередь” и из нее в бесконечном цикле достаются события и выполняются (так работает большинство UI программ)

Coroutines
Он же fiber
Работает как потоки, но метается из одного “чувака” в другого (проще хранить состояние, при этом оно фактически ничего не параллелит)