|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
C++论坛
→
『 VC++/MFC 』
→ 忙碌线程最多有几个
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
2217
人关注过本帖
标题:
忙碌线程最多有几个
只看楼主
加入收藏
邵帅
等 级:
贵宾
威 望:
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
举报帖子
使用道具
赠送鲜花
天使梦魔
等 级:
版主
威 望:
37
帖 子:564
专家分:2754
注 册:2007-8-29
第
2
楼
收藏
得分:20
线程又不分优先级,你应该看下windows核心编程的关于线程那部分.
线程操作属于抢占式,你可以自己写个16位程序测试下,每个线程用一个死循环不停的输出,最后输出界面不是理想中按CPU分配来顺序输出的,而是毫无头绪的输出,哪个线程执行的快,哪个就抢占的多,即便是一模一样的代码,也有很细微的分别.
线程会不会卡,取决于你的代码质量和设计思路,只要主线程没挂掉,子线程就可以正常执行,就像一个独立的程序.
子线程工作情况取决于你对消息泵如何设计的,你必须很详细的了解windows工作原理才行.打个比方,我以前也做过的一个,子线程用于定时器工作,但消息循环没有设计好,timer一直不得到执行,看了msdn才知道消息循环里timer属于很低的优先级,假如其它消息过于繁重可能直接强行抢占timer消息(按顺序往下直接跳过低优先级),导致函数失效.这不是线程卡不卡的问题,最后只能通过线程独立设置一个消息循环用于定时器.
我不知道你在设计什么,不过你最好对自己的东西很了解
2014-08-28 11:30
举报帖子
使用道具
赠送鲜花
天使梦魔
等 级:
版主
威 望:
37
帖 子:564
专家分:2754
注 册:2007-8-29
第
3
楼
收藏
得分:0
而且给你个提议,当线程处于待机状态时候,你最好暂停线程,一个线程即便什么也不做,如果不暂停,仅仅本身的消息循环就能让cpu占用率高达100%(双核50%以此类推) ,虽然不影响其它程序,但效率被占用了.
2014-08-28 11:40
举报帖子
使用道具
赠送鲜花
邵帅
等 级:
贵宾
威 望:
20
帖 子:174
专家分:505
注 册:2012-8-27
第
4
楼
收藏
得分:0
回复 3 楼 天使梦魔
多谢指导。
我只是疑问,如果线程函数是死循环,这样的工作线程最多跑几个才不会使主线程产生卡顿现象。
Figure out what you like. Try to become the best in the world of it.
2014-08-30 09:53
举报帖子
使用道具
赠送鲜花
tlliqi
等 级:
贵宾
威 望:
204
帖 子:15453
专家分:65956
注 册:2006-4-27
第
5
楼
收藏
得分:0
回复 2 楼 天使梦魔
很不错
2014-08-30 10:38
举报帖子
使用道具
赠送鲜花
yuccn
来 自:何方
等 级:
版主
威 望:
167
帖 子:6815
专家分:42393
注 册:2010-12-16
第
6
楼
收藏
得分:30
四个线程 如果不是死循环,不足以卡住界面,比如qq这样的进程,至少有10几个线程在跑。如果每个线程都很忙碌,比如死循环做某些任务,则记得sleep一下,
我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2014-08-30 23:59
举报帖子
使用道具
赠送鲜花
邵帅
等 级:
贵宾
威 望:
20
帖 子:174
专家分:505
注 册:2012-8-27
第
7
楼
收藏
得分: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
来 自:何方
等 级:
版主
威 望:
167
帖 子:6815
专家分:42393
注 册:2010-12-16
第
8
楼
收藏
得分:0
回复 7 楼 邵帅
可以通过工具看到的。
进程的线程数,打开对象句柄,等等都可以通过工具看到,比如可以试试prohark
我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2014-09-01 12:27
举报帖子
使用道具
赠送鲜花
yuccn
来 自:何方
等 级:
版主
威 望:
167
帖 子:6815
专家分:42393
注 册:2010-12-16
第
9
楼
收藏
得分:0
回复 7 楼 邵帅
没有确切的,一般都是不同任务在不同线程吧,不过qq的socket 监听,不会比你写的工程的需求少吧
我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2014-09-01 12:29
举报帖子
使用道具
赠送鲜花
邵帅
等 级:
贵宾
威 望:
20
帖 子:174
专家分:505
注 册:2012-8-27
第
10
楼
收藏
得分:0
多谢各位。
Figure out what you like. Try to become the best in the world of it.
2014-09-01 22:42
举报帖子
使用道具
赠送鲜花
10
1/1页
1
快速回复:
忙碌线程最多有几个
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.018216 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved