jerry_cym 发表于 2007-6-24 14:13:45

TCP和多线程的设计

这种情况怎么使用线程池?      
服务器与客户端使用TCP通讯,客户端连接服务器的时间可能很长,也可能很短。      
同时连接数要达到200-500个,能使用线程池提高性能吗?怎么使用线程池?      
如果只分配10个线程,每个线程在一个时间负责一个客户端服务,怎么才能同时服务      
200个客户端的连接?

wolf0403 发表于 2007-6-25 04:22:25

短连接比例有多少?能否在处理之前判断连接类型?在全部为短连接的情况下,单线程阻塞迭代处理可行与否?
长连接尽可能试用 asio (可以支持 TCP 了吧?),或者自己实现背景线程池(短连接如果单线程阻塞迭代处理不可行,也可以实现为线程池)。
关键是,不要尝试猜测需要的线程数量。尽可能写成 extensible 的架构,可动态配置的池线程数量,然后通过实际测量判断合适的池容积。

jerry_cym 发表于 2007-6-25 09:32:14

谢谢,有待学习:-D

HJWlWXL 发表于 2007-7-22 02:07:34

线程池的架构很烂,理论上一个线程服务一条连接的方式是时延最短的,但实际上在数百连接的情况下,线程调度的开销使得时延变得很大。而且每个线程的栈空间开销也不可小觑,32位机上单进程能使用的最大内存空间理论上是4G,但实际上安全范围只有2G。所以这种模式是不可取的。

最好的方式是单线程并发IO处理。研究下select函数和poll函数吧,都是干这个活的。但是select有句柄号限制,只支持编号1024以下的句柄。而系统默认设置下给单个进程的句柄上限是1024个。然而,有时应用要超过1024个句柄,这个时候就要修改系统配置,提升单进程句柄上限。相应地,select函数就不能用了,只能用poll函数。这种模式的实际性能是最高的。
页: [1]
查看完整版本: TCP和多线程的设计