首页 / 知识
关于多线程:如何在.NET中的线程上分散tcplistener的传入连接?
2023-04-15 08:01:00

How to spread tcplistener incoming connections over threads in .NET?使用Net.Sockets.TcpListener时,在单独的线程中处理传入连接(.AcceptSocket)的最佳方法是什么? 这个想法是当新的传入连接被接受时启动一个新线程,而tcplistener则可用于其他传入连接(并为每个新的传入连接创建一个新线程)。与发起连接的客户端的所有通信和终止将在线程中处理。 赞赏VB.NET代码的示例C#。 我一直在使用的代码如下:
我相信您可以通过与.NET中任何其他异步操作相同的方式来执行此操作:您调用该方法的BeginXxx版本,在本例中为BeginAcceptSocket。您的回调将在线程池上执行。 池化线程的可伸缩性通常比每个连接的线程好得多:一旦获得几十个连接,系统在线程之间进行切换的工作要比完成实际工作困难得多。此外,每个线程都有自己的堆栈,堆栈大小通常为1MB(尽管取决于链接标志),必须在2GB虚拟地址空间(在32位系统上)中找到该堆栈;实际上,这会将您限制为少于1000个线程。 我不确定.NET \\的线程池当前是否使用它,但是Windows有一个称为I / O完成端口的内核对象,该对象有助于可伸缩的I / O。您可以将线程与此对象关联,并且I / O请求(包括接受传入的连接)可以与其关联。当I / O完成(例如连接到达)时,Windows将释放等待线程,但前提是当前可运行线程的数量(由于其他原因未被阻止)小于完成端口配置的可扩展性限制。通常,您会将其设置为内核数的一小部分。 我想提出一种不同的方法: 此解决方案在线程方面更具可伸缩性,如果正确实施,则应具有更好的性能,然后在每个打开的连接中打开一个新线程。 O \\'Reilly C#3.0 Cookbook中有一个很好的例子。您可以从 下载随附的源代码 我会使用线程池,这样您就不必每次都启动一个新线程(因为这有点贵)。我也不会无限期地等待进一步的连接,因为客户端可能不会关闭其连接。您打算如何计划每次将客户端路由到同一线程? 对不起,没有样品。 |
最新内容
相关内容
linux命令连接光驱?
linux命令连接光驱?,系统,位置,设备,数据,电脑,服务,资料,盘中,智能,管理,Linux系统下如何挂载U盘,硬盘,光驱1、加挂NTFS文件系统 在目前多数linux命令行拨号连接?
linux命令行拨号连接?,系统,网络,软件,手机,服务,密码,地址,名称,电话号码,发行,请教名位大吓们:在Linux下如果实现PPOE拨号连接?将eth1和eth0linux线程查询命令?
linux线程查询命令?,系统,第一,线程,命令,软件,名称,信息,进程,选项,方法,Linux系统如何查看进程的线程数1、第一种方法:top命令法首先执行toplinux命令逻辑连接符?
linux命令逻辑连接符?,系统,网络,名字,环境,信息,名称,设备,发行,位置,较大,Linux文件系统操作命令1、(1)根据文件名查找例如,我们想要查找一个linux跳板机连接命令?
linux跳板机连接命令?,地址,服务,密码,工具,中国,网络,位置,系统,电脑,在线,怎么把本地文件通过跳板机FTP到一台LINUX服务器上面去1、局域中国linux连接外网命令?
linux连接外网命令?,网络,系统,工具,情况,软件,信息,地址,代理,地方,数据,请问如何给linux端口映射,我想让外网访问!虚拟机linux系统1、查询端linux命令连接ip?
linux命令连接ip?,地址,系统,网络,工作,信息,命令,密码,名称,设备,服务,linux系统常用操作命令linux常用命令有pwd命令、cd命令、ls命令、catlinux多线程下载命令?
linux多线程下载命令?,软件,工具,平台,中心,系统,代理,网络,网站,手机,官方网站,从linux服务器中下载或上传文件wget是linux下一个从网络上自linux断开线程命令?
linux断开线程命令?,系统,状态,工作,代码,线程,入口,网络,管理,名称,命令,linux下C中怎么让才能安全关闭线程方法:在线程入口函数中,调用returnlinux命令连接网址?
linux命令连接网址?,网址,系统,地址,服务,传播,数据,命令,名字,环境,网站,如何使用linux命令打开网页)、sudo命令:sudo命令用来以其他身份来执linux连接多条命令?
linux连接多条命令?,工具,情况,命令,分行,服务,地址,连续,终端,窗口,主机,linux怎么使多条命令同时执行基本上,您可以通过单一控制台窗口控制所linux有线网连接命令?
linux有线网连接命令?,系统,网络,软件,电脑,密码,地址,信息,虚拟机,终端,命令,linux系统下怎么连接网络1、启动Linux,然后在网络设置中将eth0设