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

小妹急问一个提高CPU使用率的有关问题~

2013-07-09 
小妹急问一个提高CPU使用率的问题~~小妹最近做的一个工控上位机软件,是在台式PC上运行。主要任务是从机器传

小妹急问一个提高CPU使用率的问题~~
小妹最近做的一个工控上位机软件,是在台式PC上运行。主要任务是从机器传过来数据,PC处理后存入数据库。数据量较大,且要求实时进行,数据接收的线程优先级是+2,数据处理的优先级是-1。现在的问题是,数据接收完全正常,但是数据处理严重滞后,但是查看CPU使用率,这个进程却从不超过20%!!

数据的处理就是做一些计算,然后存入数据库。

请问这个问题该怎么解决?怎么提高CPU的使用率?

PS:之前实验发现,如果数据接收和数据处理线程优先级一样,但丢包严重,提高接收优先级后丢包消失。

版上高手多,请指点一下小妹,谢谢了! CPU 占用率 工控机 多线程 数据库
[解决办法]
处理线程中是否有大量的IO等操作存在?如果处理线程时间都花在了IO上,CPU使用率可能不会太高。
你这种处理模式,我觉得可以改进:
接收到数据后,可以将数据放在数据库中,并通知处理线程从数据库中取数据;处理线程接收到消息后,就从数据库中取数据进行处理。
这样,就算接收的速度再快,处理的速度再慢,也不会出现丢数据的现象。
不过,要求实时,这个方案就不得行了,只是提供一个思路。
[解决办法]
    数据处理严重滞后,有可能是存入数据库造成的,你开三个线程:
    一个线程接收,这个你已开了并提高优先级,不用改了.第二个是处理线程,这个把收到的数据放在映射文件里,采用环形缓冲池方式贮存,处理后再放入处理缓冲区.就是一个是接收原始数据缓冲,一个是数据处理后的缓冲区.用映射文件就是避免频繁操作IO造成的速度瓶颈.第三个线程就是存入数据库,这个优先级最低.从处理数据缓冲区里取数据贮存到数据库里.
    同时如果是多核处理器,你再查一下分配处理器的函数,一个给接收线程,一个给处理线程,如果是4核,再给一个存贮线程


[解决办法]
    其实象这种情况用数据库并不合适,不过现在有实时数据库或工业数据库,看宣传性能完全满足,就是不知道实际效果怎么样,而且是收费的,没有免费的。
    大数据量还是用自定义格式以二进制方式配合映射文件贮存合适。
[解决办法]

引用:
Quote: 引用:

能否有多个数据处理并行计算呢

怎么并行呢?有参考资料吗?谢谢



OpenMP等并行计算
另外可以使用内存数据库存储数据
[解决办法]
还是要找到瓶颈,比如是I/O还是数据处理,还是数据库操作等,然后对应的做优化提升
[解决办法]
引用:
小妹最近做的一个工控上位机软件,是在台式PC上运行。主要任务是从机器传过来数据,PC处理后存入数据库。数据量较大,且要求实时进行,数据接收的线程优先级是+2,数据处理的优先级是-1。现在的问题是,数据接收完全正常,但是数据处理严重滞后,但是查看CPU使用率,这个进程却从不超过20%!!

数据的处理就是做一些计算,然后存入数据库。

请问这个问题该怎么解决?怎么提高CPU的使用率?

PS:之前实验发现,如果数据接收和数据处理线程优先级一样,但丢包严重,提高接收优先级后丢包消失。

版上高手多,请指点一下小妹,谢谢了!


数据处理速度还会慢于数据接收?不知道LZ是用什么接收数据的,又对数据做了什么复杂的处理?
[解决办法]
是同步接收数据,还是异步接受数据。
同步接收数据 会浪费 时间 (主要是等待 数据)

热点排行