Re[3]: Из синхронного сокета в асинхронный
От: nbit http://cyber-dream.ru
Дата: 28.10.11 08:30
Оценка: :)
Здравствуйте, SergeyT., Вы писали:

ST>Синхронная работа с сокетом в новом потоке — это совсем не тоже самое, что и использование асинхронного API этого сокета. Разница заключается в эффективности и потреблении ресурсов. При использовании нативных асинхронных операций будут использованы соответствующие механизмы ОС, типа портов завершения или других механизмов асинхронного взаимодействия уровня ОС, что *значительно* более эффективно, по сравнению с ручным созданием потока и работы из него.


ST>Простой пример (только с сервером, а не с клиентом): если мы для каждого входного соединения будем создавать новый поток, то на каждое новое подключение будет тратиться как минимум 1Мб памяти, при этом обработка данных также будет производиться в новом потоке. Но одновременно в сотне потоков обрабатывать данные очень не эффективно при наличии 4-х физических процессоров. Используя же асинхронный API класса TcpListener количеством активных потоков будет управлять порт ввода-вывода, который обеспечит максимальную эффективность обработки в зависимости от количества и загрузки текущих аппаратных ресурсов.


ST>Примеры асинхронной работы: TcpClient.BeginConnect и Socket.BeginReceive


Для меня очень важна производительность, поэтому я и выбрал асинхронные сокеты, хоть для меня их и очень трудно понять. Подскажите а какие есть варианты реализаций асинхронных сокетов? Потому что например классы, которые Вы указали для примера, вообще не используются в примере от MSDN Socket Performance Technology Sample см. также описание на русском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.