gpt4 book ai didi

c# - 非阻塞套接字 vs BeginXXX vs SocketAsyncEventArgs

转载 作者:太空狗 更新时间:2023-10-29 19:46:08 24 4
gpt4 key购买 nike

谁能告诉我当前的 .NET 套接字技术?

  1. 非阻塞套接字

    如果我设置 Socket.Blocking = false 并使用异步操作 - 会发生什么?

    除了 Socket.Select( )?

  2. BeginXXX 和 SocketAsyncEventArgs

    它们是否在幕后操作阻塞套接字并隐藏线程创建?

    手动创建线程是否等于使用BeginXXX方法?

    使用 SocketAsyncEventArgs 除了允许创建套接字池以及与它们相关的所有内容之外,还有其他优点吗?

还有最后一个问题:如果应用程序作为某种负载很重的二进制代理工作,大部分逻辑在单线程中完成 - 什么提供更好的可扩展性:非阻塞方法或异步操作?

最佳答案

1:Socket.Select 应该这样做,尽管我个人不倾向于使用这种方法;特别是那些 IList 在大量使用时会很烦人

2:不,反过来;阻塞操作本质上是在后台使用非阻塞,但有门。不,他们不会在幕后创建线程——除非你计算入站时的回调。我这里有一个示例,它使用 SocketAsyncEventArgs 为 12k 连接提供服务 - 线程数大约为 20。SocketAsyncEventArgs 的意图之一是:

  • 无需每次操作创建/收集大量对象,更容易有效地进行池化
  • 您可以非常有效地处理“数据现在可用”场景,而根本不需要回调(如果该方法返回 false,您应该立即处理数据 - 不会有回调)

可扩展性:异步

关于c# - 非阻塞套接字 vs BeginXXX vs SocketAsyncEventArgs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9463702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com