Глава 3. Акторы возвращаются

Десятилетиями самым важным фактором роста производительности было увеличение тактовой частоты процессора, что позволяло выполнять один и тот же набор команд за более короткий промежуток времени. Но, каждое приращение тактовой частоты требует уменьшение размеров процессора — в противном случае электрический сигнал не успевает преодолеть внутри процессора необходимое расстояние за один такт. Работает школьная формула:

svt

Без принципиальной смены технологий, уменьшать размеры процессора невозможно сколь угодно долго.  С другой стороны, меньшие по размеру процессоры выделяют больше тепла с одной единицы площади, опять же в силу законов физики. Снижение тепловыделения невозможно без снижения потребляемой мощности. Насколько эта проблема стоит остро мы можем оценить, если посмотрим как меняются размеры систем теплоотведения (куллеров). Процессоры компании Intel вплоть до 386 не требовали куллеров вообще. Современные системы теплоотведения в несколько раз превосходят по размерам сами процессоры.

куллер

Вторым важным фактором роста производительности можно назвать оптимизацию набора команд. Под оптимизацией набора команд подразумевается: уменьшение тактов работы процессора для выполнения одной команды, конвейеризация исполнения команд, предоставление специальных наборов команд для определенного набора операций. Например, умножение 16-битной ячейки памяти на регистр командой MUL в процессоре 8086 требует более 120 тактов, а в процессоре 80486 менее 30 тактов.

В 2005 году вышла статья Герба Саттера The Free Lunch Is Over A Fundamental Turn Toward Concurrency in Software, в которой автор демонстрирует на графике рост количества транзисторов, таковой частоты, потребляемой мощности и количество операций за единицу времени процессоров Intel:

CPU

Как видим, начиная с 2000 годов, количество операций за единицу времени и тактовая частота растут значительно меньшими темпами, чем раньше.

Герб Саттер резюмирует

The good news is that processors are going to continue to become more powerful. The bad news is that, at least in the short term, the growth will come mostly in directions that do not take most current applications along for their customary free ride.

Столкнувшись в ограничениями на дальнейший рост производительности в рамках одного потока команд современные процессоры стали многоядерными,то есть поддерживают прирост производительности за счет предоставления возможности выполнения нескольких команд одновременно (параллельно).

Если мы хотим в полной мере воспользоваться возможностями современных процессоров в своей программе, мы обязаны сделать ее параллельной. Именно поэтому наблюдается устойчивое повышение интереса к модели акторов в последнее десятилетие. Появились новые языки, существующие языки расширились примитивами для поддержки параллельности, например, оператор await в C#, для многих языков появились библиотеки, поддерживающие программирование на основе модели акторов. Ссылки на некоторые из них можно получить на странице википедии, посвященной модели акторов.

 Возникает резонный вопрос: не повторится ли ситуация с акторами, как 40 лет назад: вдруг появится технология, которая позволит обеспечить устойчивый рост производительности одного потока вычислений?  Конечно никто не обещать, что этого не случится, вот и Герб Саттер делает оговорку про ближайшую перспективу

at least in the short term

Однако за эти 40 лет появился еще один мощный аргумент в пользу акторов — это Internet и приложения, которые должны обеспечивать бесперебойную работу миллионов пользователей одновременно. Тут уж без распараллеливания трудно обойтись, поэтому с осторожностью, но можно утверждать, что в этот раз акторы пришли всерьез и надолго.

< Предыдыщая глава                                                                                             Следующая глава >

Хотите узнать о выходе новых глав?

Подпишитесь! И по мере того, как буду появляться новые главы, Вы будете получать уведомления на email.

* Отписаться можно в любой момент!