27
Caesar++ Как сделать много вещей сразу и хорошо

Многопоточность

  • Upload
    0legg

  • View
    28

  • Download
    5

Embed Size (px)

Citation preview

Caesar++Как сделать много вещей

сразу и хорошо

Caesar++

На самом деле, такого языка нет.

И он, вообще говоря, не нужен.

И вообще, половина существующих языков не нужна.

Caesar++

Объяснять что-то без примеров — зло, гори в аду.

Привязывать все примеры к одному языку — зло, гори в аду.

Caesar++

Для фундаментальных вещей лучше применять абстракции и метафоры.

Примеры на модельном языке хороши тем, что не зажимают нас ограничениями платформы.

Лихие 80-е

Ассемблер.

Ассемблер-light (C, C++).

Прерывания.

Прерывания

irrue 21h!

Все, никто никуда не идет, обрабатываем прерывание.

Вышли — продолжаем там, где прервались.

Лихие 90-е

Переключение контекста.

Сохраняем все регистры

Кэш и прочий трэш (TLB, конвейер) — горят в аду.

Переключение контекста

trcdCntxtm!

И так каждый раз, когда управление переходит к другому потоку.

Переключение контекста

Это жутко дорого.

Все оптимизации идут лесом.

Предсказания переходов? Длинный конвейер процессора? Горите в аду!

МногозадачностьМного процессоров или ядер — вот тут-то и начинается многозадачность.

Каждый делает свое и по какому-то протоколу они общаются.

Многозадачность для бедных

Невытесняющая

Кооперативная

Вытесняющая

Событийно-ориентированное программирование

Почти во всех интерактивных системах.

Подписываемся на сообщения, они к нам приходят и мы их обрабатываем.

Ай какие мы молодцы!!!

Ай какие мы молодцы!!!

Событийно-ориентированное программирование

Кнопкама нажаль

Прерывание прилетель

Виндосама труба шаталь, окно нашель, сообщение в очередь записаль

Мажильбе!!! onClick!

Событийно-ориентированное программирование

Весь процесс работы программы — вытягивание из очереди сообщений и обработка их.

Закончились (пришло сообщение о завершении работы) — все, никто никуда не идет.

Событийно-ориентированное программирование

Можем обрабатывать синхронно и асинхронно.

В синхронном случае того, кто отослал сообщение не отпускает, пока его не обработают

В асинхронном он узнает косвенно (коллбеки, арргх)

Акторы

Все есть акторы.

Акторы — те же объекты, только акторы.

Акторы слушают сообщения.

Акторы отправляют сообщения.

Акторы создают акторов.

Как же мне это слово за один слайд надоело…

Акторы

Все взаимодействия — через асинхронные сообщения.

Актор знает только тех, кого создал сам или тех, кто ему что-то прислал.

Акторы

Scenicus==>litera

Scenicus(litera) < делаем что-то, радоваемся>

Fork-joinБлиже для императивных языков.

Нафоркали независимых вычислителей, ждем, пока все не закончатся (в случайном порядке).

Коммуникация потоковСообщения

Отослали и не волнуемся

Куча копирований, плодим данные, все тупит.

Разделяемая память

Все ок, в одном экземпляре.

Синхронизация, мьютексы, боль, унижения, жизнь ужасна.

Разделение контекстаИли один общий контекст в рамках процесса.

Или все данные, что мы можем узнать о другом потоке/вычислителе/акторе — предоставляются им самим абсолютно добровольно по какому-то протоколу.

На этом моменте муза меня покинула…

Дальше слайдов не будет…

Дальше содержательных слайдов не будет…

Спасибо за внимание