Сокеты C # Send vs BeginSend Perfomance - PullRequest
1 голос
/ 19 мая 2011

Итак, я понимаю, что Send является синхронным, а BeginSend является асинхронным.Я слышал, что метод отправки сокетов быстрее для передачи данных, чем BeginSend (Примечание: я не говорю о производительности процессора, а только о задержке пакетов отправки и получения).Кто-нибудь может сказать мне, правда это или нет?Статья, на которую я ссылаюсь, где я слышал о синхронной передаче данных, выглядит так ниже ... Если это правда, есть ли способ обойти это?Или это так и будет при использовании асинхронной передачи данных?

Большое спасибо за помощь.

Текст статьи:

Обе эти формы общения являются средством передачи данных.Разница в том, в каком формате передаются данные.Асинхронная связь - это метод связи, наиболее широко используемый для связи с ПК, который обычно используется для приложений электронной почты, доступа в Интернет и асинхронной связи ПК-ПК.Посредством асинхронной связи данные передаются по одному байту за раз, причем каждый байт содержит один стартовый бит, восемь битов данных и один стоповый бит, в результате чего получается всего десять битов.При асинхронной связи существует большое количество служебных данных, поскольку каждый отправленный байт содержит два дополнительных бита (начальный и конечный биты) и, следовательно, существенную потерю производительности.

Синхронная связь является более эффективным методом связи.Решения CQ по подключению связываются через синхронный метод связи.Через синхронную связь данные передаются в виде кадров больших блоков данных, а не громоздких отдельных байтов.Одним из преимуществ синхронного является то, что управляющая информация легко вставляется в начало и конец каждого блока, чтобы обеспечить постоянную синхронизацию или синхронизацию.Еще одним преимуществом синхронного является то, что он более эффективен, чем асинхронный.Например, синхронная линия удаленного доступа со скоростью 56 Кбит / с может переносить 7000 байтов в секунду (56000/8) по сравнению с асинхронной линией соединения со скоростью 56 Кбит / с, которая может передавать только 5600 байтов в секунду (56000/10).При передаче больших объемов информации это приводит к значительному увеличению скорости и производительности.

Ответы [ 3 ]

4 голосов
/ 19 мая 2011

Я слышал, что метод отправки сокетов быстрее для передачи данных, чем BeginSend

Не верно.

Что касается текста статьи.Вы говорите о двух очень разных вещах.Асинхронное сетевое соединение и асинхронные методы в компьютерной программе.

0 голосов
/ 19 февраля 2013

Самая важная вещь, которую я бы сказал, - это то, что методы Synchronous Socket намного проще программировать и могут быть выполнены в одной функции-обертке. (Я предполагаю, что вы будете наследовать от класса Socket и добавите свою собственную обработку ошибок, ведение журнала и т. Д., Чтобы обернуть вокруг Send и Receive)

В случае асинхронного вам потребуются как минимум две функции и другой класс или структура (StateObject) для отслеживания того, что вы намеревались передать.

Вы, конечно, можете маскировать существование метода обратного вызова, использующего технику анонимного делегата, но это не меняет того факта, что ваш код будет немного сложнее для понимания (и поддерживать)

Я не смог точно рассчитать время выполнения функций, но я видел, что для меньших размеров байтов (<4 КБ) синхронизация кажется более быстрой, а для больших блоков (> 8 КБ) асинхронная - лучше. Возможно, когда вы используете ASync для получения более крупных буферов, функция Async пошла дальше и получила еще несколько байт, пока вы обрабатывали ранее полученный блок.

0 голосов
/ 20 мая 2011

Это, конечно, не правда. В статье рассказывается о синхронных и асинхронных в контексте типов сетевых подключений. Однако это не имеет ничего общего с тем, как данные отправляются с помощью сокетов. В .Net синхронный и асинхронный просто означает, как методы будут блокировать (синхронный) и неблокированный (асинхронный), и не имеет никакого отношения к скорости передачи данных. Задержка одинакова для всех используемых синхронных и асинхронных методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...