Главная страница проекта ИНФОРМАТИКА-21

Наука Школе

Все заметки

О кооперативной многозадачности

Ермаков И. Е. (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/] —  не нуждающийся в рекомендациях высокопроизводительный веб-сервер (разработка российского программиста). Обеспечивает производительность благодаря асинхронной архитектуре с минимальным числом системных потоков (видимо, с активным использованием конечноавтоматного подхода).


4) См. также о базе Redis.

 

Главная страница проекта ИНФОРМАТИКА-21

Наука Школе