| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2217 人关注过本帖
标题:忙碌线程最多有几个
只看楼主 加入收藏
邵帅
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:20
帖 子:174
专家分:505
注 册:2012-8-27
结帖率:78.26%
收藏
已结贴  问题点数:50 回复次数:9 
忙碌线程最多有几个
在完成端口解决socket通讯多线程时,提出开启的线程个数最好为cpu个数的两倍以达到最高效率。
我现在想实现线程池,即最多只能有4个工作线程,对任务进行排队处理。发现当有4个忙碌任务时会造成界面很卡,抛开线程池而仅仅开启4个忙碌线程发现结果一样。
如果4个工作线程+1个界面主线程的优先级相等,当4个工作线程完全占用分给他们的CPU时间片,操作系统也会强制将控制权转给主线程,对于5个线程而言不应该会卡吧?
求解释。
搜索更多相关主题的帖子: 优先级 多线程 操作系统 最好 
2014-08-28 11:01
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:20 
线程又不分优先级,你应该看下windows核心编程的关于线程那部分.
线程操作属于抢占式,你可以自己写个16位程序测试下,每个线程用一个死循环不停的输出,最后输出界面不是理想中按CPU分配来顺序输出的,而是毫无头绪的输出,哪个线程执行的快,哪个就抢占的多,即便是一模一样的代码,也有很细微的分别.

线程会不会卡,取决于你的代码质量和设计思路,只要主线程没挂掉,子线程就可以正常执行,就像一个独立的程序.
子线程工作情况取决于你对消息泵如何设计的,你必须很详细的了解windows工作原理才行.打个比方,我以前也做过的一个,子线程用于定时器工作,但消息循环没有设计好,timer一直不得到执行,看了msdn才知道消息循环里timer属于很低的优先级,假如其它消息过于繁重可能直接强行抢占timer消息(按顺序往下直接跳过低优先级),导致函数失效.这不是线程卡不卡的问题,最后只能通过线程独立设置一个消息循环用于定时器.

我不知道你在设计什么,不过你最好对自己的东西很了解
2014-08-28 11:30
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:0 
而且给你个提议,当线程处于待机状态时候,你最好暂停线程,一个线程即便什么也不做,如果不暂停,仅仅本身的消息循环就能让cpu占用率高达100%(双核50%以此类推) ,虽然不影响其它程序,但效率被占用了.
2014-08-28 11:40
邵帅
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:20
帖 子:174
专家分:505
注 册:2012-8-27
收藏
得分:0 
回复 3 楼 天使梦魔
多谢指导。
我只是疑问,如果线程函数是死循环,这样的工作线程最多跑几个才不会使主线程产生卡顿现象。

Figure out what you like. Try to become the best in the world of it.
2014-08-30 09:53
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
回复 2 楼 天使梦魔
很不错
2014-08-30 10:38
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:30 
四个线程 如果不是死循环,不足以卡住界面,比如qq这样的进程,至少有10几个线程在跑。如果每个线程都很忙碌,比如死循环做某些任务,则记得sleep一下,

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2014-08-30 23:59
邵帅
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:20
帖 子:174
专家分:505
注 册:2012-8-27
收藏
得分:0 
回复 6 楼 yuccn
那有确切的数量吗?比如cpu的1倍或者2倍

Figure out what you like. Try to become the best in the world of it.
2014-08-31 20:03
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 7 楼 邵帅
可以通过工具看到的。
进程的线程数,打开对象句柄,等等都可以通过工具看到,比如可以试试prohark

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2014-09-01 12:27
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 7 楼 邵帅
没有确切的,一般都是不同任务在不同线程吧,不过qq的socket 监听,不会比你写的工程的需求少吧

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2014-09-01 12:29
邵帅
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:20
帖 子:174
专家分:505
注 册:2012-8-27
收藏
得分:0 
多谢各位。

Figure out what you like. Try to become the best in the world of it.
2014-09-01 22:42
快速回复:忙碌线程最多有几个
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018216 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved