一个按钮的功能,需要长期大量占用CPU,如何缓解功能执行期间的CPU占用率呢?

问题描述

项目中有一个按钮的功能,需要较长时间才能执行完毕,所以我new一个线程出来执行。可是线程执行过程中,cpu占用率一直居高不下,以至于影响到其他用户的正常使用。如何控制线程的cpu占用率呢?我听说可以在for循环中使用sleep的方式来解决类似问题,请问这是可靠的方法吗?

解决方案

解决方案二:
与其Sleep,你还不如把它直接终止了。
解决方案三:
引用1楼sp1234的回复:

与其Sleep,你还不如把它直接终止了。

可是我这个功能还没执行完呢
解决方案四:
引用1楼sp1234的回复:

与其Sleep,你还不如把它直接终止了。

哥哥,你肯定是大神,教教我呗
解决方案五:
循环尽量少用sleep()
解决方案六:
优化程序吧,你什么工作能使cpu居高不下?如果是大数据量的数据库操作,那么就把数据拿到内存中操作,如果是循环太多,那么就多做几个线程,多线程执行,如果你自己完全没办法,那就别执行,否则影响别人也不好,是吗引用楼主zhaoycchencsd的回复:

项目中有一个按钮的功能,需要较长时间才能执行完毕,所以我new一个线程出来执行。可是线程执行过程中,cpu占用率一直居高不下,以至于影响到其他用户的正常使用。如何控制线程的cpu占用率呢?我听说可以在for循环中使用sleep的方式来解决类似问题,请问这是可靠的方法吗?

解决方案七:
这个应该不是button的问题,可能是业务处理逻辑的问题。
解决方案八:
修改自己的逻辑代码吧。根本的东西不行,再怎么优化执行过程都是枉然。
解决方案九:
引用5楼呵呵呵呵呵呵呵呵呵呵呵的回复:

优化程序吧,你什么工作能使cpu居高不下?如果是大数据量的数据库操作,那么就把数据拿到内存中操作,如果是循环太多,那么就多做几个线程,多线程执行,如果你自己完全没办法,那就别执行,否则影响别人也不好,是吗Quote: 引用楼主zhaoycchencsd的回复:
项目中有一个按钮的功能,需要较长时间才能执行完毕,所以我new一个线程出来执行。可是线程执行过程中,cpu占用率一直居高不下,以至于影响到其他用户的正常使用。如何控制线程的cpu占用率呢?我听说可以在for循环中使用sleep的方式来解决类似问题,请问这是可靠的方法吗?

逻辑是这样的,数据库里大概有10万用户,按钮的作用就是计算每个用户昨日的佣金记录,然后发送微信模板消息告诉用户。实在是用户量庞大。
解决方案十:
引用7楼世界在我指尖的回复:

修改自己的逻辑代码吧。根本的东西不行,再怎么优化执行过程都是枉然。

确实是数据处理量庞大,该怎么办
解决方案十一:
根据用户的数据量分页处理。比如你有十万个用户,你每次处理两万,那么其实你要分五次来做处理的,那你就创建五个线程。每个线程获取到不同的用户,然后根据用户去处理你的逻辑(计算每个用户昨日的佣金记录);线程动态创建,根据自己的页容量
解决方案十二:
如果你这个按钮点下去后,不需要等待,你就可以在后台跑一个Job或者是WindowsService或计划任务的Console程序,利用队列来执行处理。也就是说Button按下,向队列(比如MSMQ)发送一个指令,指令一发出,Button的动作就执行完毕了。后台Service接收到这个更新的指令后,再作一系列的处理,这个处理就与你的页面没什么关系了
解决方案十三:
引用10楼LoserOrLeader的回复:

根据用户的数据量分页处理。比如你有十万个用户,你每次处理两万,那么其实你要分五次来做处理的,那你就创建五个线程。每个线程获取到不同的用户,然后根据用户去处理你的逻辑(计算每个用户昨日的佣金记录);线程动态创建,根据自己的页容量

现在一个线程就已经占用90的cpu了,开更多岂不是会导致cpu爆表吗
解决方案十四:
引用11楼jjkk168的回复:

如果你这个按钮点下去后,不需要等待,你就可以在后台跑一个Job或者是WindowsService或计划任务的Console程序,利用队列来执行处理。也就是说Button按下,向队列(比如MSMQ)发送一个指令,指令一发出,Button的动作就执行完毕了。后台Service接收到这个更新的指令后,再作一系列的处理,这个处理就与你的页面没什么关系了

现在就是类似的效果,用线程实现的。可是问题是我想限制一个线程的cpu占用率
解决方案十五:
引用13楼zhaoycchencsd的回复:

Quote: 引用11楼jjkk168的回复:
如果你这个按钮点下去后,不需要等待,你就可以在后台跑一个Job或者是WindowsService或计划任务的Console程序,利用队列来执行处理。也就是说Button按下,向队列(比如MSMQ)发送一个指令,指令一发出,Button的动作就执行完毕了。后台Service接收到这个更新的指令后,再作一系列的处理,这个处理就与你的页面没什么关系了

现在就是类似的效果,用线程实现的。可是问题是我想限制一个线程的cpu占用率

这个就是属于优化你的逻辑的部分了,占用这么大的CPU占用率,是运算逻辑很复杂还是数据量异常大?
解决方案:
建议参考一下:http://www.cnblogs.com/fish-li/archive/2011/11/20/2256385.html
解决方案:
引用14楼jjkk168的回复:

Quote: 引用13楼zhaoycchencsd的回复:
Quote: 引用11楼jjkk168的回复:
如果你这个按钮点下去后,不需要等待,你就可以在后台跑一个Job或者是WindowsService或计划任务的Console程序,利用队列来执行处理。也就是说Button按下,向队列(比如MSMQ)发送一个指令,指令一发出,Button的动作就执行完毕了。后台Service接收到这个更新的指令后,再作一系列的处理,这个处理就与你的页面没什么关系了

现在就是类似的效果,用线程实现的。可是问题是我想限制一个线程的cpu占用率

这个就是属于优化你的逻辑的部分了,占用这么大的CPU占用率,是运算逻辑很复杂还是数据量异常大?

就假设是数据量异常大,该怎么去限制CPU使用率呢。
解决方案:
通过Job将昨日佣金计算好(时间可以选在凌晨,用户很少使用),放到单独表里,在页面点击按钮后,直接从单表读取数据,然后异步循环发送(Parallel.For),,应该比较好。。。。

时间: 2024-10-30 17:22:30

一个按钮的功能,需要长期大量占用CPU,如何缓解功能执行期间的CPU占用率呢?的相关文章

js-jquery.sheet如何在自定义文件中添加一个按钮并实现其功能?

问题描述 jquery.sheet如何在自定义文件中添加一个按钮并实现其功能? 例如,添加一个按钮,选中某个单元格时,单击按钮可以在该单元格添加一个.要求不能修改jquery.sheet的源文件. 解决方案 你的意思是原来在单元格中有一个按钮?还是这个按钮在别的地方,选中单元格后,点击这个按钮,就会在单元格中新增一个按钮?还是?

代码-C#如何做一个按钮,对richtextbox中选中的文本进行恢复原来格式,恢复原来颜色的功能

问题描述 C#如何做一个按钮,对richtextbox中选中的文本进行恢复原来格式,恢复原来颜色的功能 恢复到一开始richtextbox中 文本的格式形式,求知道的大神给个代码,看看,谢谢了!! 解决方案 richTextBox1.Undo();

添加一个按钮怎么样让Ext.ux.grid.RowExpander有全部展开和收缩的功能

问题描述 添加一个按钮怎么样让Ext.ux.grid.RowExpander有全部展开和收缩的功能,求高手求助 解决方案 解决方案二:这个要调用,collapseAll(),expandAll()解决方案三:怎么掉用?用对象点这两个方法吗?但报不支持此属性和方法错误.能不能说得跟具体点.解决方案四:对啊,怎么弄啊,我现在也在弄个这样的效果,求助啊

js-jquery.sheet如何在自定义文件中添加一个按钮并实现功能?

问题描述 jquery.sheet如何在自定义文件中添加一个按钮并实现功能? 为页面添加一个按钮,当选中某个单元格时,单击按钮,该单元格添加一个.要求不能在jquery.sheet源文件中修改. 解决方案 该单元格添加一个,这个是什么意思?没看明白..单元格添加一个什么东西?

javascript-js实现页面一个按钮点击后相当于键盘按下ctrl+shift+b的功能

问题描述 js实现页面一个按钮点击后相当于键盘按下ctrl+shift+b的功能 js实现页面一个按钮点击后相当于键盘按下ctrl+shift+b的功能

jsp-为什么两个按钮我随便点击一个按钮都会更新成功,插入按钮我需要的是插入更能而不是更新功能,求大神指教

问题描述 为什么两个按钮我随便点击一个按钮都会更新成功,插入按钮我需要的是插入更能而不是更新功能,求大神指教 <%@ page import="com.trs.constants.AuthConstants"%> <%@ page import="org.springframework.validation.FieldError"%> <%@ page language="java" import="jav

gridview 如何通过一个按钮实现隐藏列,显示列的功能且能够通过程序取到隐藏后列的值

问题描述 大家好,请问在一个gridview中,如何实现以下操作?增加一个按钮,点击后能够隐藏gridview中的某些列,再次点击后又恢复显示.并且有一段代码,能够在取到隐藏列的值?谢谢! 解决方案 解决方案二:把列宽设为0不就行了,取值什么的都不影响.或者用表样式,点按钮的时候隐藏就去掉表样式里的列样式,显示就添加列样式,这样也不会影响对表进行取值的.

一个统计表每天的新增行数及新增存储空间的功能_MsSql

使用文中提供的代码做一个统计表每天的新增行数及新增存储空间的功能 实现步骤如下: 1. 创建表 创建表,存储每天的表空间占用情况 CREATE TABLE [dbo].[t_rpt_table_spaceinfo]( [table_name] [sysname] NOT NULL, [record_date] [date] NOT NULL, [record_time] [time](7) NOT NULL, [rows_count] [bigint] NULL, [reserved] [big

android-如何在指定的位置处设置一个按钮

问题描述 如何在指定的位置处设置一个按钮 android系统环境下,我想在指定的位置,比如说 (x,y) 处设置一个按钮.这个位置的点是在运行时候生成的. 如何做来实现这个功能呢? 解决方案 LinearLayout.LayoutParams p = new LinearLayout.LayoutParams (LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); p.topMargin = ; p.bottomMargin = ; p.lef