线程创建成本

vangork 2009-04-27 01:03:26
每条线程是否分配有足够的工作来证明线程创建成本并没有浪费?

这句话怎么去理解,创建成本是否浪费怎么去评估呢???
...全文
198 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vangork 2009-05-12
  • 打赏
  • 举报
回复
关键就是如何去评估线程的创建是否浪费了,怎么合理的去度量线程的创建成本和实际带来的好处呢???(我现在评价的指标只有程序运行时间阿)还有一个问题是怎么去合理的创建最优的线程个数?(如何能从理论上确定分配多少线程能达到最优化的效果)
tianfang 2009-05-01
  • 打赏
  • 举报
回复
线程的创建和销毁是销毁CPU、内存资源的,如果你面临大量的线程处理,线程的创建、销毁销毁的资源可能就要超过线程功能实现的时间,例如教科书上多线程的例子,线程的功能只是对一个数值进行加减,这种情况,线程的创建、销毁已经远远大于线程的运行的开销。

看看线程池,它的目标就是减少这个问题,线程先创建好,用的时候,从线程池中选择一个激活,将参数传递,线程处理完成,再让线程在线程池中休眠。就减少了线程的创建和销毁
microcloud 2009-04-29
  • 打赏
  • 举报
回复
从并行计算的角度讲, 创建线程是为了完成更多的计算任务。
如果你创建了很多线程,但程序本身并没有很高的并行度,或者说并没有足够多的计算资源可用(比如说,你在一个四核的处理器上创建十个线程,但最多只能同时有四个线程占用CPU资源),这时有些线程就是浪费的(因为创建/销毁线程也有一定的开销)。
  • 打赏
  • 举报
回复
[Quote=引用楼主 vangork 的帖子:]
每条线程是否分配有足够的工作来证明线程创建成本并没有浪费?

这句话怎么去理解,创建成本是否浪费怎么去评估呢???
[/Quote]

创建一个新线程,除了要从进程里分走一部分堆栈外,还需要额外的一点内存来维护它。
但是好处也是明显的,多线程没有多进程那么浪费,而多线程则有重入的问题。
具体就要见仁见智了。
intel_iclifort 2009-04-27
  • 打赏
  • 举报
回复
线程的创建和销毁本身也需要消耗一定的系统资源, 也就是花费相应的执行时间.

如果每个线程实际的工作时间比较短(也可以理解为工作量较小), 那么可能这样的多线程化不一定有意义. 也就是说未必8个线程一定比2/4个线程的效果好.


记得以前曾经看到过有帖子质疑OpenMP或者多线程化的效果, 其实可能就是它带来的好处不明显, 甚至有副作用

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧