看到一个问题,说如何保持5000-10000+的健壮的socket服务。

初学者肯定是会把每个连接都开一个线程来监听。这很浪费资源

通常只会(动态地)占用几个线程就能保持3000个长连接会话了。
“为每个监听对象开一个新的线程”这是设计错误。你可以使用NetworkStream的异步Read,在没有消息的时候无需阻塞在什么线程里。

据不同的操作系统,多线程的约束条件也不同。当你发现工作线程超过1000个,或者IOCP(IO完成端口)线程超过800个,就应该赶紧断掉服务器进行维护了。
首先要有一个意识,使用几个、十几个线程就足以应付上千个普通业务连接了。
有人说“如果我要保持1000个客户端连接,就得开1001个线程来接收数据”,这纯粹是瞎扯。请一定要注意。

我说的“工作线程”是指你的进程中使用的工作线程总数,而不是只windows的。

在你的windows中,总线程数超过1500个是经常有的事情。你可以打开你的进程管理器看看cpu的指标,看看当前有多少线程在切换使用。很可能超过1500个。但是可以监视每一个单个的进程,看看它的线程数,通常只有10个左右(只有System线程数会有100多)。

而你的服务器进程,工作线程数不应该太高。平常只有十几个线程足以应对几千客户端了。

.net如何处理高并发socket,建立高性能健壮的socket服务的更多相关文章

  1. Swoole如何处理高并发

    有需要学习交流的友人请加入swoole交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群 swoole如何处理高并发 ①Reactor模型介绍 IO复用异步非阻塞 ...

  2. mysql如何处理高并发(转)

    mysql高并发的解决方法有:优化SQL语句,优化数据库字段,加缓存,分区表,读写分离以及垂直拆分,解耦模块,水平切分等. 高并发大多的瓶颈在后台,在存储mysql的正常的优化方案如下: (1)代码中 ...

  3. [高并发]EntityFramework之高性能扩展

    目录 简介 读写分离 指定字段更新 事务 Entity 简介 本EF扩展插件将持续更新:开源,敏捷,高性能.(由于EF Core暂未提供方便的钩子位置,暂无EF Core版本) EntityFrame ...

  4. 如何处理高并发情况下的DB插入

    1.  我们需要接收一个外部的订单,而这个订单号是不允许重复的 2.  数据库对外部订单号没有做唯一性约束 3.  外部经常插入相同的订单,对于已经存在的订单则拒绝处理 对于这个需求,很简单我们会用下 ...

  5. linux中对socket的理解 socket高并发

    1.socket是什么? 其实准确的来说,socket并不仅仅用于linux而已,它也应用于TCP/IP中.笼统的来说,socket就是指的“IP地址+端口号”.比如我有一个ssh服务器A,这时候我有 ...

  6. 构建高性能高并发Java系统 .

    转:http://blog.csdn.net/nengyu/article/details/7591854 场景这里指的高性能高并发服务器是一个有状态的服务,可以理解成web或者socket服务器,每 ...

  7. nginx、swoole高并发原理初探

    阅前热身 为了更加形象的说明同步异步.阻塞非阻塞,我们以小明去买奶茶为例. 同步与异步 同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式. 同步:当一个同步调用发出去后,调用者要一直等待调 ...

  8. Springcloud 微服务 高并发(实战1):第1版秒杀

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列之15 [博客园总入口 ] 前言 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版 ...

  9. 高并发的socket的高性能设计【转】

    转自:https://blog.csdn.net/quincyfang/article/details/44654351 高性能数据传输系统的框架设计 1 引言 随着互联网和物联网的高速发展,使用网络 ...

随机推荐

  1. [Nginx]实战Nginx:Nginx的一些介绍

    ------------------------------------------------------------------------------------------------ 首先列 ...

  2. zTree插件 角色、部门、人员分类选择

    // 传参数调用 function test(){roleOrOrgSelect(3,function(data){console.log(data);});} /** * * @param type ...

  3. 整合mybaties 逆向生成 pojo mapper.xml

    第一步:配置properties 第二步:放入generatorConfig.xml文件  在总目录下  这个是生成工具 第三步:放入工具类,自动生成用的,  pom里面要加入6个依赖 第四步:运行u ...

  4. http协议以及http1.0和http1.1的区别

    header响应头信息: HTTP/1.1 302 FOUND Content-Length: 0 Set-Cookie: sessionid=n3gozvqbjba1zckr7v0ccj6yn7v9 ...

  5. 学JS的心路历程-JS支持面向对象?(二)

    昨天讲了面向对象的继承,今天我们来谈谈多态和封装吧! 多态polymorphism 抽象讲法解释,就是使用单一界面操作多种型态的物件 继承父类别,定义与父类别中相同的方法,但实作内容不同,称为复写(o ...

  6. powerdessigner使用教程

    https://jingyan.baidu.com/article/86fae346e089393c49121a11.html

  7. 用R画韦恩图

    #导入R包 library(grid)library(futile.logger)library(VennDiagram) #建立测试数据集 A = 1:150B = c(121:170,300:32 ...

  8. SpringBoot SpringSession redis SESSION

    号称无缝整合httpsession 共享, 但注意如果存在第三方框架,例如SESSION并发控制,这个是需要自己重写session名单的. 关于redis session 共享 的session并发控 ...

  9. openssl数字证书常见格式 协议

    证书主要的文件类型和协议有: PEM.DER.PFX.JKS.KDB.CER.KEY.CSR.CRT.CRL .OCSP.SCEP等. PEM – Openssl使用 PEM(Privacy Enha ...

  10. 修改weblogic启动模式:client改为server

    1.生产模式 -> 开发模式 Step 1:将domain下的 /weblogic/domain/app_domain/bin/setDomainEnv.sh文件的PRODUCTION_MODE ...