首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

[C++]启动多进程性能有关问题,但系统CPU空闲有关问题,消息队列+数据库

2012-04-27 
[C++]启动多进程性能问题,但系统CPU空闲问题,消息队列+数据库请教一个问题,情况如下:【背景】Hp-Unix下C++程

[C++]启动多进程性能问题,但系统CPU空闲问题,消息队列+数据库
请教一个问题,情况如下:
【背景】Hp-Unix下C++程序,系统采用前台写入请求消息到“入队列”,然后启动多个后台服务进程,后台服务进程访问数据库,处理后然后将应答消息写入“出队列”返回,现在测试系统的性能最多每秒能处理多少个请求数。
【现象】统计当请求在200毫秒以内响应返回的百分比达到99%认为系统可用。
  1)系统启动50个进程,发送请求达到1000个请求/S时,系统响应200毫秒以内请求达到99.8%,系统CPU平均60%,内存平均35%,消息队列不堵塞,系统可用。(结合后面的测试1000/S似乎是当前系统的最大可受理请求极限值)
  2)系统启动55个进程,发送请求提高到1100个请求/S时,系统响应200毫秒以内请求只能达到50%多,系统CPU平均70%,内存平均35%,消息队列堵塞,系统不可用。
  3)系统启动60、65、70个进程,情况与2)同,消息队列堵塞,系统不可用。
【问题】为什么提高进程并发数目,不能提高每秒系统处理请求的上限值?而且在CPU和内存等主机资源还很空闲的情况下,看起来似乎是不能利用起主机资源来。
  unix系统调度问题?还是对共享资源的访问竞争引起的吗?可能涉及的资源:
  a)入消息队列的读取 b)数据库的访问 c)出队列的写入
  但是目前基本排除数据库访问的竞争导致消息队列堵塞,大家请提提意见,谢谢


[解决办法]
写请求消息到"入队列"的只有一个进程吧? 
这个队列加锁了的吧, 可能大多数进程都去竞争这个锁了, 而不是在处理请求.
[解决办法]
多进程+多线程+条件变量+互斥量+共享内存+环形队列。
多进程+多线程+消息队列。
多进程+多线程+SOCKET/UNIX-SOCKET。

热点排行