问题描述
项目中有一个按钮的功能,需要较长时间才能执行完毕,所以我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),,应该比较好。。。。