International conference of developers
and users of free / open source software

Подходы к параллельной обработке сетевого трафика. Фреймворк AnyEvent

Naim Shafiev, Russia, Москва

Сетевой траффик испытывает неуклонный рост, в результате чего перед программистами неизменно возникает проблема быстрой и своевременной его обработки. Современные операционные системы, особенно Unix-подобные (GNU/Linux, FreeBSD, Solaris) предоставляют довольно гибкие механизмы мультиплексирования (иногда именуемые polling), которые идеально подходят для однопоточных сетевых демонов и клиентов. Безусловно, сетевые программы, написанные с использованием потоковой парадигмы, могут использовать старые приемы и технологии, однако большинство современных скриптовых языков,таких как Perl, PHP, python, ruby имеют очень ограниченную реализацию классических потоков.

Существует несколько решений для обработки сетевого траффика:

  1. Использовать более мощное “железо” (сервера, маршрутизаторы и т.д).
  2. Использовать механизм форков. Метод довольно старый и отработанный, но в виду потребления памяти и скорости создания дочернего процесса (что особенно актуально для ОС семейства Windows) не подходят для современных требований.
  3. Использовать механизмы современного polling’а (например epoll, kqueue). Этот вариант идеально подходит для быстрой разработки, а кроме того избавляет программистов от критических областей.
  4. Использовать механизм системных потоков. По производительности и по потреблению оперативной памяти этот метод вне конкуренции, однако он наиболее сложен в разработке, и требует высокой квалификации от программистов.
  5. Использование так называемых “зеленых тредов”. По сути этот подход приводит к однопоточной реализации программы с развитыми внутренними планировщиками, что является уже псевдопараллельной программой.

Наиболее реентабельным для большинства случаев является 3-й метод. Как показывает практика, самые быстрые веб-сервера типа nginx и lighttpd используют механизм современного polling’а совместно с механизмом форков.

Материалы к докладу

blog comments powered by Disqus