Я много читал о блокирующих и неблокирующих сокетах для udp, но мне трудно понять достоинства одного над другим. Подавляющее большинство комментариев в Интернете, кажется, указывают на то, что неблокирование лучше, но не очень точно определяет, в каких сценариях они будут лучше, и я не нашел ссылок на то, когда блокировка предпочтительна. Я надеюсь, что в этом вопросе сообщество сможет пролить немного света на эту тему.
немного предыстории о моем собственном наборе проблем, чтобы ответы могли быть применены как конкретно, так и к общей природе вопроса. У меня есть сервер udp, который я пишу, который будет иметь 40 подключений на локальной сети, благодаря чему будет поступать постоянный поток данных. Скорости передачи данных будут около 250 МБ / с в среднем с пиковыми значениями до 500 + МБ / с с avg размер датаграммы около 1400 байт. обработка дейтаграмм невелика, но из-за большого объема сообщений эффективность и производительность сообщения являются приоритетными для предотвращения потери пакетов.
так как я не смог действительно найти какую-либо контекстную информацию для чего-то, напоминающего этот конкретный набор проблем, мне пришлось сделать несколько предположений, основанных на том, что я смог почерпнуть о блокировке против неблокирования. Я просто закончу это моей текущей гипотезой, а затем открою ее для вашего вклада. в основном, так как это будет почти постоянный поток пакетов при каждом соединении, я думаю, что блокирующий сокет будет предпочтительнее из-за того факта, что время, которое любая функция recv фактически потратит заблокированным, будет очень очень минимальным по сравнению с использованием события основанная модель, которая будет иметь подавляющее количество триггеров в асинхронном режиме. Я чувствую, что моим истинным набором проблем, скорее всего, будет управление приоритетами для 40 потоков, которые я планирую использовать для чтения из сокетов ... чтобы каждый получал свою долю процессорного времени. я могу ошибаться в своем подходе и идеях, поэтому я надеюсь и буду очень признателен, если сообщество сможет помочь пролить свет на этот вопрос.
С уважением, Джим.
~ ~ редактировать
в то время как я обеспокоен тем, как проектирование потоков будет влиять / интегрироваться с вопросом блокировки / неблокирования. меня действительно беспокоит то, как следует рассматривать блокировку / неблокирование с точки зрения моего набора проблем. если многопоточность действительно становится проблемой, я могу пойти с решением пула потоков.
~ edit2 ~
Во-первых, я хотел сказать, что покажите вам ответы. некоторые из вас упоминали, что модель с одним потоком / сокетом с таким количеством сокетов может быть плохой идеей, и я признаю, что я сам пробовал с решением. однако в одной из ссылок в ответе Николая автор обсуждает модель с одним потоком / сокетом и ссылается на очень интересную статью, на которую, как я думал, я буду ссылаться, поскольку она рассеивает множество мифов, которые я держал о потоках против события основанные модели: почему события плохая идея
наслаждаться.