Наука — Школе |
Ермаков И. Е. (http://ermakov.net.ru/) для проекта «Информатика-21»
Много говорилось о нехватке многопоточности (конкурентной многозадачности) в Блэкбоксе и "отсталости" механизма кооперативной многозадачности, реализуемого в ББ с помощью Services.Action.
Однако опыт современных высоконагруженных систем (так называемая "сфера
hi-load") говорит об ином.
Достаточно рассмотреть несколько примеров:
1) Платформа Node.js [http://nodejs.org/] — платформа для разработки и
исполнения высоконагруженных масштабируемых серверных приложений на JavaScript,
которую используют такие компании, как Yahoo!, ВКонтакте и др.
Эта платформа построена на асинхронном программировании,
при котором на выполнение запускается небольшой блок кода, а каждый следующий
блок ставится в качестве обработчика на событие завершения предыдущего.
Здесь важно обратить внимание на два момента:
— программа вручную разбивается на порции для независимого (асинхронного) исполнения;
— исполнение таких порций происходит в одном системном потоке (хотя если ядер процессора несколько, то на каждом из них можно создать отдельный исполняющий поток).
2) СУБД Tarantool/Box [http://opensource.mail.ru/] — нереляционная СУБД,
разработанная компанией Mail.ru и ориентированная на высокую нагрузку (см. "Tarantool:
как обрабатывать 1,5 млрд запросов в сутки?" [http://habrahabr.ru/company/mailru/blog/136288/])
Процитируем последнюю статью:
"Вообще говоря, Tarantool — lock-free система, доступ ко всем данным, на уровне структур данных и кэшей, осуществляется последовательно, тогда как на уровне сети, конечно же, поддерживается параллельная обработка множества соединений.
Для реализации этого подхода мы используем так называемые coroutines, также
известные как «лёгкие» или «зелёные» потоки. "
Заметим, что второе (точнее, первое) основополагающее решение Tarantool — хранение всех данных в оперативной памяти (при наличии на диске журнала операций, что обеспечивает полную сохранность данных).
Те, кто имеет представление об архитектуре СУБД, понимают, насколько такой подход упрощает систему, а значит — способствует надёжности и производительности продукта. Это результат своевременного осознания, что старые ограничения (традиционно малый объёма и дороговизна ОЗУ) исчезают и позволяют совершить упрощение.
3) Веб-сервер Nginx [http://nginx.org/]
— не нуждающийся в рекомендациях
высокопроизводительный веб-сервер (разработка российского программиста).
Обеспечивает производительность благодаря асинхронной архитектуре с
минимальным числом системных потоков (видимо, с активным использованием
конечноавтоматного подхода).
Наука — Школе |