我试图每次优化多个连接到TCP套接字服务器.
每次收到连接请求时,在监听服务器中启动新线程是否被认为是良好的做法,甚至是合理的?
我应该在什么时候开始担心基于此基础架构的服务器?什么是我可以工作的最大背景线程数,直到它没有任何意义?
平台是C#,框架是Mono,目标操作系统是CentOS,RAM是2.4G,服务器在云端,我预计每秒大约有200个连接请求.
不,你不应该每个连接有一个线程.相反,您应该使用异步方法(BeginAccept/EndAccept,BeginSend/EndSend等).这些将更有效地利用系统资源.
特别是,您创建的每个线程都会在上下文切换,堆栈空间,缓存未命中等方面增加开销.例如,Linux在管理这些东西方面比Windows更好,但这不应该成为让你自由创造任意线程的借口;)