|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.02.2018, 01:11 | #1 |
Пользователь
Регистрация: 10.04.2017
Сообщений: 66
|
Узнать очередь на сервере
Здравствуйте. Начал использовать epoll api для работы с сокетами. Возник вопрос. Один поток отлавливает события через epoll и передает другим задания. Если на сокет сервере появляется события, epoll их улавливает, но после accepta, пока я не закрою первый сокет я не получаю новые события. Epoll думает что я знаю о них. Подскажите, как узнать сколько сокетов весит в очереди на подключение (backlog функции listen). Для длины чтения я нашел нужные функции, а для длины подключения не могу. Заранее спасибо.
На всякий случай, что бы не возникало вопросов. Код:
|
14.02.2018, 08:53 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Я правильно понимаю, что один поток пишет в очередь а другой читает и оба потока не утруждают себя синхронизацией?
Доступ к каждой очереди надо контролировать мьютексом! Кстати, гораздо эффективней будет если очередь одна и каждый поток будет сам выбирать следующее событие. |
14.02.2018, 12:09 | #3 | |
Пользователь
Регистрация: 10.04.2017
Сообщений: 66
|
Кажд
Цитата:
|
|
14.02.2018, 12:10 | #4 |
Пользователь
Регистрация: 10.04.2017
Сообщений: 66
|
|
14.02.2018, 14:41 | #5 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Что будет если придут 10 событий?
Поток проснется и начнет циклично писать в очередь и семафор. Как только первый элемент добавиться в очередь проснется рабочий поток и начнет из этой очереди читать но в этот момент первый поток все еще туда пишет. Доступ к очереди надо защищать мьютексом! Цитата:
Надо либо получать на каждый входящий свое событие, либо делать accept пока не скажет wouldblock (но для этого надо неблокирующий, да). Если особо извращаться можно делать дополнительно select(). Последний раз редактировалось waleri; 14.02.2018 в 14:50. |
|
15.02.2018, 01:45 | #6 | |
Пользователь
Регистрация: 10.04.2017
Сообщений: 66
|
Цитата:
В общем с потоками я разберусь. Если сервер сокет будет не блокирующим, то и все подключенные тоже будут не блокирующими, если я не ошибаюсь. Не скажется ли это на производительности? И что лучше? неблокирующие сокеты или дополнительное использование select с таймером в 0? |
|
15.02.2018, 08:45 | #7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
неблокирующий сокет.
Желаю удачи с потоками. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вводим 15 элементов в очередь, затем выводим на экран эту очередь и добавил в очередь еще один элемент. Потом удаляем любой элемен | Xumera | C++ Builder | 2 | 07.12.2013 13:56 |
Как узнать путь до общего ресурса, находясь на сервере? | Izhic | Windows | 2 | 16.06.2011 19:44 |
очередь | blacktener | Общие вопросы C/C++ | 1 | 18.04.2011 02:49 |
Очередь | sw47 | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 30.03.2011 20:23 |