套接字服务器中每个客户端连接的新线程

时间:2010-03-24 05:33:12

标签: multithreading mono sockets

我正在尝试每次优化多个连接到TCP套接字服务器。

每次收到连接请求时,在监听服务器中启动新线程是否都是合理的做法,甚至是理性的?

我应该在什么时候开始担心基于此基础架构的服务器?什么是我可以工作的后台线程的最大数量,直到它没有任何意义?

平台是C#,框架是Mono,目标操作系统是CentOS,RAM是2.4G,服务器在云端,我预计每秒大约有200个连接请求。

1 个答案:

答案 0 :(得分:8)

不,每个连接不应该有一个线程。相反,您应该使用异步方法(BeginAccept / EndAccept,BeginSend / EndSend等)。这些将更有效地利用系统资源。

特别是,您创建的每个线程都会在上下文切换,堆栈空间,缓存未命中等方面增加开销。例如,Linux在管理这些东西方面比Windows更好,但这不应成为让你自由创造任意线程的借口;)