node.js (Андрей Костенко)
DESCRIPTION
TRANSCRIPT
node.js
Как работает async
•Получаем http запрос•Смотрим, есть ли пользователь с
этой сессией•Если нужно – добавляем
пользователя•Добавляем запись “Вася зашел
на index.html”
Пример: счетчик посещений
Варианты решения
•Цикл•SELECT * FROM users ...•INSERT INTO users•INSERT INTO stats
JFDI
JFDI
Варианты решенияWorkers
MM
SS SSSS
Workers (idea)
Ага, щас
Workers (real world)
Workers• Работает быстрее
• Вариант I несложно превратить в II (в большистве случаев)
• Поддержка нескольких CPU
• Много worker-ов - много RAM (в случае с процессами)
• Бардак с shared memory
• Процессорное время распределяет планировщик ядра (абы как)
Async calls
Async•Количество задач ограничено только возможностями CPU
• Вы сами выбираете, когда переключаться между задачами
• Разработка и поддержка сложнее
•Используется только одно ядро
•Нельзя использовать блокирующийся код
Workers + asyncMM
AsynAsyncc
AsynAsyncc
AsynAsyncc
Workers + Async• Вы используете все возможности вашего сервера
• Вы сами выбираете, когда переключаться между задачами
• Разработка и поддержка кода становятся еще сложнее
Какой вариант лучше?
Не знаю
QA•cron•while/accept•forks•async
Async
Работа с сетью
•select/poll O(N=total fd)
•kqueue (BSD only) O(N=active fd)
•epoll (linux only) O(N=active fd)
Таймеры• setitimer
• alarm
Абстракция от бардака
• libev
• libevent
node.jslibevlibev JSJS v8v8+ + ......+
=
node.jsnode.js
•HTTP•FS•Прозрачный SSL•DNS•setTimeout, setInterval
Что в коробке?
Что еще?•npm = cpan = pip = emerge•ndb•Socket.IO•async-интерфейс к 99%
приложений, с которыми вам прийдется работать*
* По данным агенства Roga & Kopyta inc. на июль 2011-го года
Success stories
•ВКонтакте XMPP•37Signals•Wikia•Palm/HP WebOS
Тесты производительно
сти ** Эти тесты тестируют неверно,
результаты неправильныеи пользы от них никакой
Беполезный график
http://twitter.com/kostenko