Параллельные вычисления – материалы

Есть несколько вещей, с которыми в прошлом году у меня сложилсь не так успешно, как я хотел. Среди них попытка разобраться с построением многопоточных веб-серверов. Но старая мудрость гласит, что побеждает в итоге тот, кто способен 9 раз упасть, а потом 10 раз подняться заново и продолжить борьбу. Так что я попробую ещё раз.

Стоит определиться с целью: что именно даёт асинхронный код? Во-первых, это скорость работы, а скорее утилизация всей мощи современного многоядерного CPU. Если ранее (примерно до 2007 года) CPU ускорял код относительно незаметно для разработчика за счёт повышения тактовой частоты одного потока, то сейчас скорость потока есть практически постоянная величина, зато таких потоков стало множество параллельно работающих, и уже нужно писать намеренно такой код, который сумеет их все задействовать. Во-вторых, это масштабируемость работы: в терминах веб-серверов это возможность обслуживать растущее множество клиентских сессий без ущерба для производительности сервера.

(more…)