- 主题:有没高效率的线程池实现?
主要看你想做什么,你是想拿来做worker按task干活,就直接asio, asio里现在好几个线程池了,都支持strand,有轻量级的。如TBB严格来说不是多线程池,是把代码并行化,在系统有资源的情况下自动并行,并不能保证多线程,因为tbb里甚至没有线程管理的组件。
--
FROM 183.128.161.*
asio目录里有一个priority strand的例子,可以基于那个改。
至于限定cpu占用,这个很难把,没有系统函数,如果只是绑定cpu,可以在生成thread的时候绑定。
【 在 z16166 的大作中提到: 】
: 可能得自己定制一个。有一些奇葩需求,比如要修改线程优先级,限定cpu占用率等等
--
FROM 183.128.162.*
建议读一下超线程的原理
超线程增不增效,和线程之间是不是相互通讯或者共享内存没有关系,和机器码的能不能乱序执行有关系,是更底层的东西
一个例子就是,如果很多if()这样的branch prediction的代码,超线程用处就不大
【 在 ylh1969 的大作中提到: 】
: 你说的我有点听不懂。
: 我的测试是8核16超线程。
: 放8个线程,性能是单线程的8倍,CPU50%。放16线程性能还是8倍,CPU100%。如果需要75%,放12个线程,性能还是8。
: ...................
--
FROM 183.128.164.*
另外,cpu核之间的效率和cache的共享结构有关系,牙膏厂的L1 cache结构比农厂的好一些,处理相对大一些的数据要好,农厂的核虽然多,共享的cache太多,也限制效率。
--
FROM 183.128.164.*
同鸡讲鸭
8核16超线程,你占8核就显示50%,实际占用100%这个理解是错的
【 在 ylh1969 的大作中提到: 】
: 这个你还管得了人家用了多少if!
: 我的测试就是用了一个实际有用的实例,500个节点的有向圖K短路径计算。哪里管得了人家用了多少if!
: 能够在8核环境得到8倍性能,说明调度器效率很高,性能没问题。
--
FROM 183.128.164.*