Асинхронная коммуникация TCP в.NET

Перейдите в файл package.json и добавьте нижнюю строку

"scripts": {
    "start":"node ./node_modules/app.js"
  }

. Примите и внесите изменения в свою героинскую игру

.
7
задан Noldorin 20 February 2009 в 22:22
поделиться

4 ответа

Существует различие при использовании Рабочего потока для вызова синхронной версии, Вы свяжете один из потоков на блокирующемся вызове.

Принимая во внимание, что Начать методы не свяжут поток, но будут вместо этого использовать обратный вызов на соответствующем сигнале ввода-вывода, вызов назад будет затем работать на потоке от пула.

10
ответ дан 6 December 2019 в 19:42
поделиться

Я соглашаюсь с AnthonyWJones, предполагаю, что Ваш пул потоков имеет 10 потоков, но у Вас есть 100 достаточно пассивных клиентов. С асинхронными вызовами Вы можете BeginRead для каждых из них, и когда данные от кого-то будут готовы, это будет обработано одним из потоков пула. Но при попытке использовать QueueUserWorkItem, Вы запланируете получение данных только от 10 клиентов. И если они ничего не отправят через 1 час, то другие 90 клиентов никогда не будут получать шанс получить данные.

1
ответ дан 6 December 2019 в 19:42
поделиться

Я не действительно уверен, почему NetworkStream даже имеет BeginRead/Write, так как это в основном нарушает цель NetworkStream во-первых. При помощи Асинхронных методов Вы получаете более быстрый ответ, большую масштабируемость и уменьшенное потребление ресурсов.

Если Вы только когда-либо собираетесь иметь одно соединение за один раз, то не имеет значения очень при использовании потока пула потоков или нет, но если Вы принимаете много соединений затем, Вы определенно хотите использовать асинхронный.

1
ответ дан 6 December 2019 в 19:42
поделиться

Как другие указали, выделение другого потока к Вашему процессу повлияет на Вас при использовании синхронного метода, поскольку Вы увеличиваете число одновременных соединений.

Однако, если бы Вы знаете, что у Вас только когда-либо будет небольшое количество соединений, я сказал бы, что это становится промывкой, и необходимо выбрать метод, который является самым естественным для приложения.

В случае, где поток наверху незначителен, я ожидал бы, что эти два сценария будут терять значение как это.

Асинхронный:

  1. Вы выполняете вызов к BeginRead / BeginWrite
  2. "Системе" (платформа / ОС) сообщают о том, что Вы хотите
  3. Читайте / Запись завершается
  4. "Система" говорит потоку в пуле потоков называть Ваш обратный вызов
  5. Вы делаете то, что необходимо сделать для завершения операции

Синхронный в другом потоке:

  1. Вы заставляете поток от пула потоков обрабатывать IO
  2. Вы выполняете вызов Read / Запись
  3. "Системе" (платформа / ОС) сообщают о том, что Вы хотите
  4. Читайте / Запись завершается
  5. Вы делаете то, что необходимо сделать для завершения операции

Единственная разница здесь - то, что шаг 4 от Асинхронного вызова становится шагом 1 в синхронном в другом случае потока.

1
ответ дан 6 December 2019 в 19:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: