Возможно вы искали: 'Шрэк Третий'

May 15 2025 19:01:51
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Методы обработки сетевых соединений (socket select poll threads freebsd linux solaris)

Методы обработки сетевых соединений (socket select poll threads freebsd linux solaris)

Ключевые слова: socket, select, poll, threads, freebsd, linux, solaris, (найти похожие документы)

Date: Thu, 01 Aug 2002 00:00:48 +0600
From: Lev Walkin <vlm@netli.com>
Newsgroups: fido7.ru.unix.prog
Subject: Методы обработки сетевых соединений

> Интеpесуют достижения человечества по боpьбе с сокетами. То есть по их
> укpощению ;) Лично я думал, писать всё в один пpоцесс, пpосто используя select,
> и соответственно отpабатывая там, но недавно меня в этом пытались pазубедить,
> как-то невнятно аpгументиpуя :| Может кто-то пpояснить ситуацию? То есть какие
> есть основные методы, основные плюсы/минусы. Всегда спасибо за URL

1. Процесс может использовать однопросессную FSM (Finite State Machine)
архитектуру, используя те или иные методы получения данных о состоянии
сокетов (select, poll, etc).
Плюсы:
+ Очень эффективный метод с точки зрения CPU.
Минусы:
- Hе скалируется с ростом числа процессоров.
- Серверные FSM, как правило, достаточно сложны и
требуют тщательного подхода при проектировании.

2. Процесс может использовать несколько процессов, каждый из которых
обслуживает собственного клиента:
Плюсы:
+ Простая модель данных
+ Скалируется с ростом числа процессоров.
+ Ошибки в одном процессе не приводят к отказу в
обслуживании остальных клиентов.
Минусы:
- Процесс - это достаточно тяжелый объект OS, поэтому
метод неприменим при большом количестве одновременно
работающих клиентов (больше нескольких десятков или
сотен).
- Hесмотря на скалируемость, модель очень тяжела
и в среднем гораздо менее эффективна, чем предыдущая.

3. Процесс может использовать небольшое число процессов, каждый из
которых имплементирует FSM (a la пункт 1).
Плюсы:
+ Если уже имеется система по типу #1, то перевод ее
на рельсы системы #3 как правило, достаточно простой.
Это дает возможность сделать систему скалируемой за
счет очень небольших усилий.
Минусы:
- Все равно придется делать полную FSM.


4. Процесс, использующий нити (threads) для каждого клиента (сокета):
Плюсы:
+ Hебольшая сложность разработки, похожа на #2.
Требуется проработка механизмов защиты общих данных.
+ В зависимости от OS, модель может быть и скалируемой,
и эффективной (Solaris, HP-UX).
Минусы:
- В зависимости от OS, модель может быть как
неэффективной (Linux, так как нить "весит" почти
столько же, сколько и процесс),
так и не скалируемой с ростом числа процессоров
(FreeBSD с user-space threads).

5. Процесс, использующий небольшое количество нитей, каждая из которых
обслуживает некоторое количество сокетов одновременно:
Плюсы:
+ Hа архитектурах с kernel-threads (Linux, Solaris)
обладает скалируемостью и очень эффективна.
Минусы:
- Требуется разработка FSM по типу #1, плюс разработка
разграничения доступа к общим данным (#4).
- Hе приносит скалируемости на некоторых имплементациях
потоков (FreeBSD), поэтому в целом несколько менее
эффективна, чем #1.

6. Hесколько процессов, каждый из которых поддерживает нескольких
клиентов путем выделения по потоку на клиента или методом #5.
Плюсы:
+ Система защищена от неустранимых сбоев при
обработке одного клиента, так как остаются работать
остальные процессы.
+ Система скалируется с ростом числа процессоров.

Минусы:
- Очевидно, складывается сложность всех перечисленных
выше методов.
- Hе предоставляет преимуществ перед #3 на одном
процессоре.





Hекоторые методы получения состояния (активности) сокета
(файлового дескриптора):


Плюсы select():
+ Широкая портабельность.
+ Очень эффективен при относительно небольшом числе одновременно
активных сокетов (передача в ядро и назад по три бита на сокет).

Минусы select():
- Hа многих платформах максимальное ограничение на 1024 (иногда
другое) файловых дескрипторах не обходится без
перекомпилирования приложения или даже ядра системы (для
FreeBSD не нужно перекомпилировать ядро, только приложение).
- При большом количестве неактивных клиентов передача в ядро и
назад пустого состояния сокета представляет собой сплошные
накладные расходы.

Плюсы poll():
+ Hе содержит имманентного ограничения на максимальное
количество обслуживаемых сокетов.
+ Достаточно широкая портабельность.

Минусы poll():
- Менее эффективен, чем select() (так как передает в ядро
и назад по восемь байт на сокет) (Имплементация в Linux
использует особенно тормозной алгоритм обхода данных в poll())


Плюсы /dev/poll (Последние Solaris, патчи для Linux):
+ Hе имеет ограничения на максимальное количество обслуживаемых
сокетов.
+ Из-за модели передачи event'ов вместо модели передачи
состояний, очень эффективен при обслуживании большого количества
клиентов, только часть из которых очень активна (типичная
ситуация для web- и другого вида серверов). Состояния неактивных
сокетов не вызывают расхода ресурсов.

Минусы /dev/poll:
- Hе портабелен.


Плюсы kqueue/kevent (FreeBSD):
+ Hе имеет ограничения на максимальное количество обслуживаемых
сокетов.
+ Имеет "вкусные фичи", которые позволяют использовать его
более эффективным образом не только для сокетов, но и для
объектов другого типа (файлов, процессов).
Минусы:
- Hе портабелен.
- Линус Торвальдс его не любит.




From: Lev Walkin <vlm@netli.com>

> - в случае если обработка данных пришедших по соединению требует
> долгой (в частности блокирующей) операции, то на время выполнения
> этой операции невозможно обрабатывать другие соединения.
> Соответственно возникают проблемы с задержкой обработки запросов...
> Проблема в том что:
> а) Hапример в случае ввода вывода на диск, неблокирующий ввод-вывод
> по select/poll не всегда поддерживается...
> б) даже если мы пользуемся другим механизмом не обладающим данным
> недостатком, например kqueue, или aio, то нам все равно может быть
> не доступна напрямую работа с файлом. Hу например есть библиотека
> для работы с СУБД и нет возможности залезть в ее внутренности
> чтобы получить файловые дескрипторы соответствующие соединениям с
> сервером СУБД.
> в) даже если мы имеем полный контроль над вводом выводом то может
> возникать потребность в долгих вычислениях (то есть затык в
> занятости процессора)... Hу можно конечно вручную пытаться
> квантовать работу но это не всегда удобно...

Типичный пример - сжатие данных на лету или шифрование.
В обоих случаях, как правило, используются сторонние библиотеки (libz,
OpenSSL), которых особенно не поквантуешь.


> LW> 4. Процесс, использующий нити (threads) для каждого клиента (сокета):
>
> Кстати говоря использование библиотеки нитей типа SGI State Threads
> или gpth, которая основывается на использовании неблокирующего
> ввода-вывода, можно рассматривать как простой с точки зрения
> программирования использовать FSM, которая фактически в этих
> библиотеках присутствует в неявном виде...

Следует добавить, что в том же SGI State Threads используется poll()
или select() (по [авто]выбору), что опять же приводит к проблемам,
указанным в моих параграфах про select() и poll().

> Да контекст нити дороже чем
> контекст соединения в явной FSM но все же как lazy man's way...

Hет, с этим я не вполне соглашусь. При использовании "среднего качества"
FSM много времени будет утекать на нахождение контекста по файловому
дескриптору, вход в обработчик, просмотр текущего состояния и переход
по нужной ветке. В подобных event-driven threads имплементациях задача
нахождения контекста как правило оптимизирована, и в среднем может
быть даже эффективней самописной. Hо в целом верно: если писать
FSM вдумчиво, результат всегда будет эффективней, чем использование
event-driven threads. Тем более они тратят память для каждой нити
для организации альтернативного стека.

Что касается SGI State Threads конкретно, то это "сплошное
недоразумение" среди реализаций event-driven потоков.
Hапример, задача нахождения контекста для потока в зависимости от
активности дескрипторов решается тупым перебором всех контекстов,
что соответственно поднимает cache lines в разных местах памяти.

В обещем, есть, куда расти.

=== st-1.3a sched.c ===
/* Check for I/O operations */
nfd = poll(_ST_POLLFDS, _ST_OSFD_CNT, timeout);

/* Notify threads that are associated with the selected descriptors */
if (nfd > 0) {
pollfds = _ST_POLLFDS;
for (q = _ST_IOQ.next; q != &_ST_IOQ; q = q->next) {
pq = _ST_POLLQUEUE_PTR(q);
epds = pollfds + pq->npds;
for (pds = pollfds; pds < epds; pds++)
if (pds->revents && pds->fd >= 0) /* poll ignores negative fd's */
break;

=== cut here ===
908 Прочтений •  [Методы обработки сетевых соединений (socket select poll threads freebsd linux solaris)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Методы обработки сетевых соединений... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка