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