QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2841|回复: 3

TCP和多线程的设计

[复制链接]
发表于 2007-6-24 14:13:45 | 显示全部楼层 |阅读模式
这种情况怎么使用线程池?      
  服务器与客户端使用TCP通讯,客户端连接服务器的时间可能很长,也可能很短。      
  同时连接数要达到200-500个,能使用线程池提高性能吗?怎么使用线程池?      
  如果只分配10个线程,每个线程在一个时间负责一个客户端服务,怎么才能同时服务      
  200个客户端的连接?
发表于 2007-6-25 04:22:25 | 显示全部楼层
短连接比例有多少?能否在处理之前判断连接类型?在全部为短连接的情况下,单线程阻塞迭代处理可行与否?
长连接尽可能试用 asio (可以支持 TCP 了吧?),或者自己实现背景线程池(短连接如果单线程阻塞迭代处理不可行,也可以实现为线程池)。
关键是,不要尝试猜测需要的线程数量。尽可能写成 extensible 的架构,可动态配置的池线程数量,然后通过实际测量判断合适的池容积。
回复

使用道具 举报

 楼主| 发表于 2007-6-25 09:32:14 | 显示全部楼层
谢谢,有待学习
回复

使用道具 举报

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-3-29 21:42 , Processed in 0.061344 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表