社区
C++ 语言
帖子详情
程序中使用了一个有100个线程的线程池对普通PC来说在程序性能或运行方面有什么影响?
yiyuan
2006-09-23 10:43:48
我的程序中有个线程池,为了程序运行方便,我现在可能需要在线程池中放入较多的线程数(比如100个)。请问这样数量的线程数对于程序或系统来说会不会有什么影响?(对于普通PC来说)比如运行性能、或内存、CPU什么方面的。还是其实多少线程影响都不大?
在线程池中,暂时没有使用的线程平常应该是在挂起状态吧?实际上真的同时使用这么多线程的时候并不多,主要因为设计的问题,为了以防万一,因为有时候非要同时进行很多个任务。
...全文
924
16
打赏
收藏
程序中使用了一个有100个线程的线程池对普通PC来说在程序性能或运行方面有什么影响?
我的程序中有个线程池,为了程序运行方便,我现在可能需要在线程池中放入较多的线程数(比如100个)。请问这样数量的线程数对于程序或系统来说会不会有什么影响?(对于普通PC来说)比如运行性能、或内存、CPU什么方面的。还是其实多少线程影响都不大? 在线程池中,暂时没有使用的线程平常应该是在挂起状态吧?实际上真的同时使用这么多线程的时候并不多,主要因为设计的问题,为了以防万一,因为有时候非要同时进行很多个任务。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Song
2006-09-26
打赏
举报
回复
同时存在的线程数最好不要有上百个这么多,这样虽然没有什么问题,但会大大降低CPU效率
pottichu
2006-09-26
打赏
举报
回复
真的没有必要那么多线程,
线程间切换,反而浪费时间。
smalltalk
2006-09-25
打赏
举报
回复
专家意见:
1. 目前的配置的计算机,不论是运行 Windows,还是 *NIX,系统, 一个进程开上百的进程不会有什么问题。
2. 采用简单的增加线程来增加并发处理量,在大多数情况下都是比较合适的模式。如果情况复杂,比如要求并发的数量平均超过100+, 采用多线程不是一个很好的模式.
3. 对于大的并发处理要求, 过多的增加线程数,反而会减低相应时间和效率, 应为计算机资源大量被系统开销所占用.
4. 采用异步模式, 或者事件驱动方式是解决大并发量的常用手段. 举个例子,在Windows下用 IOCompletePort可以只用几个线程来同时服务上千个并发连接. 在*Nix, 也可以采用Select port方式达到同样的效果.
5. 线程池的设计也很关键, 简化设计的线程池保持固定的线程数目,不会动态调整. 高级的线程池可以动态创建和删除服务线程. 这也可以减少对系统资源长期的占用.
Song
2006-09-25
打赏
举报
回复
这样做不好,虽然大部份线程长期处于在等待状态,但不表示它们不占用CPU时间(视平台不同)。线程池最好只保留一定数量的线程,当偶尔有大量并发时,可以阻塞或临时建立线程。
taodm
2006-09-25
打赏
举报
回复
在奔腾166以上的机器上,上百个线程就不成问题了。
如帝国时代、魔兽、红警等游戏,每个小兵都是一个线程。看一下你的机器在多少小兵后开始响应变慢,就可认为你可以开多少线程。
jixingzhong
2006-09-25
打赏
举报
回复
楼主可以考虑算法改进一下;
问题虽然不大, 但是, 这样的限制就有了 ...
线程在没有必要的情况下 可以kill 掉 ~
cici2006
2006-09-25
打赏
举报
回复
应该没有问题的。
Jedimaster
2006-09-24
打赏
举报
回复
从来没有用过100个线程的,大多数都是等待,完成就RETURN掉了。
数目到不是问题,就怕堆栈溢出了。
OOPhaisky
2006-09-23
打赏
举报
回复
100个线程的线程池,这个数量到没有关系,关键是同时运行的线程是多少,如果大部分线程都处于睡眠状态则没有问题,但是如果一个进程有很多线程同时处于运行状态,则要有问题,但是根据不同的操作系统又有不同的表现。
zzw_happy
2006-09-23
打赏
举报
回复
池的个数是根据你实际并发情况来设置的,一般来说100个也许有点多。
池中线程不用是挂起的,对系统没有负担。
mynamelj
2006-09-23
打赏
举报
回复
有什麽必要開100個線程呢?
線程場景的頻繁切換反而會影響程式運行效率.
yiyuan
2006-09-23
打赏
举报
回复
我当然希望线程都运行的情况下也还能行。如果线程多了就不行我也就不设那么多了。
实际在跑的线程数是变化的,大多时候都不多,不过确实是可能会很多的。
beginnow
2006-09-23
打赏
举报
回复
应该影响不大,按LZ说的创建的100个线程是最大数,绝大多数处于睡眠状态应该影响不大,但是要使全部唤醒的话,恐怕一般的机器都收不了.
innocentlogin
2006-09-23
打赏
举报
回复
主要看你同时有多少线程实际在跑
jixingzhong
2006-09-23
打赏
举报
回复
现在的机子,
没有多大的影响吧 ...
不是在用古董就好
healer_kx
2006-09-23
打赏
举报
回复
机器不卡啊?
多
线程
及
线程
池
的实现
本文简短总结一下java里面多
线程
的实现(重点会讲一下
线程
池
实际工作
使用
最多的)。 简单介绍一下概念: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,
一个
进程包含1–n个
线程
。(进程是资源分配的最小单位)
线程
:同一类
线程
共享代码和数据空间,每个
线程
有独立的
运行
栈和
程序
计数器(
PC
),
线程
切换开销小。(
线程
是cpu调度的最小单位)
线程
的
运行
状态 有 :创建、就绪、
运行
、阻塞、终止。 如图: 简单对每个状态解释一下: 创建:New 就是新建了
一个
线程
对象 就绪:Run
Java高级编程十二:多
线程
及
线程
池
的
使用
第十二章 多
线程
1.基本概念:
程序
、进程、
线程
程序
(Program) 为了完成特定的任务、用某种语言编写的一组指令的集合,即指一段静态的代码,静态对象 进程(process) 是
程序
的一次执行过程,或是正在
运行
的
程序
,是
一个
动态的过程,有自身的生命周期
线程
(thread) 进程可以进一步细分为
线程
,是
一个
程序
内部的一条执行路径 若
一个
进程同一时间并行执行多个
线程
,就是支持多
线程
的
线程
最为调度和执行的单位,每个
线程
都拥有独立的
运行
栈和
程序
计数器(
pc
),
线程
切换的开销小
一个
进程的多个
线程
灵魂发问!
线程
池
到底创建多少
线程
比较合理?
虽然
线程
池
的模型被剖析的非常清晰,但是如何最高性能地
使用
线程
池
一直是
一个
令人纠结的问题,其
中
最主要的问题就是如何决定
线程
池
的大小。这篇文章会以量化测试的方式分析:何种情况
线程
池
应该
使用
多少
线程
数。 计算密集型任务与IO密集型任务 大多数刚接触
线程
池
的人会认为有
一个
准确的值作为
线程
数能让
线程
池
适用在
程序
的各个地方。然而大多数情况下并没有放之四海而皆准的值,很多时候我们要根据任务类型来决定
线程
池
大小以达到最佳性能。 计算密集型任务以CPU计算为主,这个过程
中
会涉及到一些内存数据的存取(速度明显快于IO),执行任
C#
线程
(三)
线程
池
4.
线程
池
4.1 简介一般情况下我们都
使用
Thread类创建
线程
,因为通过Thread对象可以对
线程
进行灵活的控制。但创建
线程
和销毁
线程
代价不菲,过多的
线程
会消耗掉大量的内存和CPU资源,假如某段时间内突然爆发了
100
个短小的
线程
,创建和销毁这些
线程
就会消耗很多时间,可能比
线程
本身
运行
的时间还长。为了改善这种状况,.NET提供了一种称之为
线程
池
Thread Pool)的技术。
线程
池
提供若干个固定...
线程
与
线程
池
一切要从CPU说起 原因很简单,CPU并不知道
线程
、进程之类的概念,CPU只知道两件事: 1、从内存
中
取出指令 2、执行指令,然后回到1 接下来的问题是CPU是从哪取出指令? 答案是来自
一个
被称为
PC
的寄存器,也就是我们熟知的
程序
计数器,我们可以简单的把寄存器理解为内存,只不过存取速度更快而已。
PC
寄存器里存放的是指令在内存
中
的地址,指令就是CPU将要执行的下一条指令。
PC
寄存器
中
的地址默认是自动加1的,这当然是有道理的,因为大部分情况下CPU都是一条接一条顺序执行,当遇到if、else时,这
C++ 语言
64,281
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章