Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Уточнение по асинхронным сокетам и паттерну throttling

#c_sharp #net #асинхронность


В этой теме тс написал, что запустив все задачи разом (подключение к  300 000 разным
IP адресам) - эффективнее, чем использовать ограничивающий паттерн throttling.

Вопрос: если мы сразу запустим все задачи, без троттлинга - не забьются ли у нас
все доступные TCP порты? Ведь, если я правильно понимаю, каждый сокет занимает один
свободный порт, всего у нас 65535 портов, а IP адресов у нас 300 000. Это чревато большими
потерями.
    


Ответы

Ответ 1



Если задача быстрая, то порт будет занят на очень короткое время. И 65к портов хватит, чтобы "одновременно" проверить все 300к адресов (потому что проверяются они на самом деле не одновременно). Плюс в библиотечной реализации возможны оптимизации, когда для нескольких соединений используется один порт, как это сделано, например, в HttpClient. Но чем больше времени будет занимать задача, тем больше это скажется на общей производительности и занятых портах. Но да, проще всего написать код, запустить, посмотреть занятые порты и поиграться со временем выполнения задачи.

Комментариев нет:

Отправить комментарий