3. • ;Раньше была практика форкаться на запрос
• copy-on-write позволял шарить между процессами
;код
• ,невообразимо медленно но для модемов
.нормально
9. • При большом количестве одновременных запросов
начинаются проблемы с шедулингом и
;переключением контекста
• время поровну делится на клиентов и
пропорционально количеству клиентов замедляется
отдача ответа
10. • Нитки отчасти помогают уменьшить стоимость
, . .переключения контекста т к не требуют смены
адресного пространства
11. • Valgrind gdb .и будут сниться ночью Проезд по
памяти осуществляется под нагрузкой и очень
плохо отслеживается
12. • ,Помимо непредсказуемости переключения нитки
:неоптимальны по количеству переключений
• Переключения в данном примере стоило бы делать
:так
13. RubyНитки в
• ;Медленные
• ;Не утилизируют ядра процессора
• ;Реализованы самым неоптимальным способом
• threadsafe (Основные библиотеки не мало кто
).вкладывает в это силы
14. Evented
• -Многие сетевые приложения делают частый ввод
(вывод и быструю обработку данных шаблонизация
+ );проверки
• Операции ввода вывода долгие и с неизвестным
. ,временем работы Чем их ждать лучше заниматься
;делом
• - :Беда с дисковым вводом выводом он на текущий
;момент на практике синхронный
• (FSM);НЕ конечный автомат
16. EVentmachine
• - Ruby 1.8;Стандарт де факто для
• ;Ввод данных
• ;Готовность к выводу данных
• ;Таймер
• OS ( , SIGHUP . .).Сигнал от мертвый ребенок и т п
18. Проблемы
• Очень тяжело распиливать линейный код на
;колбеки
• (eventedИспользование многоядерности
приложения вообще стараются делать
).однонитевыми
19. Fibers
• Ruby 1.9 fibers —В есть управляемые пользователем
. Coroutines;нитки
• Neverblock Ruby 1.8;Команда портировала их на
• Revactor Eventmachine,использует не а стандарную
libev;
• eventmachine.Совмещают удобства ниток и
20. multicore
• ;Руби пока далек от использования многоядерности
• 1.9 GIL;В всё равно есть
• Возможно альтернативные команды помогут
(Rubinius, MacRuby);
• Python GIL;тоже использует
• Java ( , );В нитки дорогие системные а не зеленые
• .Запускаем процессы по количеству ядер
21. Выводы
• Fork ;очень дорогой
• -eventedНе архитектура плохо обслуживает много
;медленных клиентов
• EventMachine ,для руби подходит прекрасно огромное
, ;количество библиотек всё хорошо
• Fibers EventMachine,удобнее чем но мало
;используются
• NДля работы на многих ядрах запускается рабочих