- 主题:有没高效率的线程池实现?
以下是chatgpt给的:
在C++中,有几种高性能的线程池库可以选择,以下是一些常用且功能强大的开源线程池库,支持高性能并且具备取消任务操作的功能:
Boost.Asio
Boost.Asio 是一个广泛使用的异步I/O库,虽然它主要设计用于网络编程,但它也提供了强大的线程池功能。它支持任务的取消操作,可以通过取消I/O对象或超时操作来实现。适用于需要处理大量并发任务的应用程序。
ThreadPool
ThreadPool 是一个轻量级的、易于使用的C++11线程池库。它支持动态调整线程数量以及任务的取消操作,但取消操作可能需要用户手动管理任务的生命周期。
CTPL (C++ Thread Pool Library)
CTPL 是另一个轻量级的C++11线程池库。它支持任务取消操作,但需要用户在任务代码中检查取消状态。
Folly Thread Pool
Folly 是Facebook开源的高性能C++库,其中包含了高效的线程池实现。Folly的线程池库支持任务的取消操作,并提供了丰富的功能来管理线程和任务。
Intel Threading Building Blocks (TBB)
Intel TBB 是一个广泛使用的并行编程库,它提供了高效的任务调度和线程池管理功能。虽然直接的任务取消操作支持有限,但通过使用其他机制(例如任务组)可以实现类似功能。
Concurrency TS / std::experimental::thread_pool
Concurrency TS 是C++标准库的扩展,它包含了实验性的std::experimental::thread_pool,提供了高效的线程池实现,并且支持取消操作。这个库在C++17及以上的环境中可用,但它还未成为正式标准。
这些库在设计上各有侧重,选择哪个库取决于你的项目需求,例如是否需要高度可定制化的功能、是否与其他库兼容、以及是否需要跨平台支持等。如果项目已经在使用Boost库,直接使用Boost.Asio的线程池功能可能是最方便的选择。
--
FROM 114.241.228.*
主要看你想做什么,你是想拿来做worker按task干活,就直接asio, asio里现在好几个线程池了,都支持strand,有轻量级的。如TBB严格来说不是多线程池,是把代码并行化,在系统有资源的情况下自动并行,并不能保证多线程,因为tbb里甚至没有线程管理的组件。
--
FROM 183.128.161.*
可能得自己定制一个。有一些奇葩需求,比如要修改线程优先级,限定cpu占用率等等
--
FROM 114.241.228.*
folly
【 在 z16166 的大作中提到: 】
: 以下是chatgpt给的:
: 在C++中,有几种高性能的线程池库可以选择,以下是一些常用且功能强大的开源线程池库,支持高性能并且具备取消任务操作的功能:
: Boost.Asio
: ...................
--
FROM 114.247.64.*
asio目录里有一个priority strand的例子,可以基于那个改。
至于限定cpu占用,这个很难把,没有系统函数,如果只是绑定cpu,可以在生成thread的时候绑定。
【 在 z16166 的大作中提到: 】
: 可能得自己定制一个。有一些奇葩需求,比如要修改线程优先级,限定cpu占用率等等
--
FROM 183.128.162.*
得有附加的开销吧?
确实有些项目要求限制CPU的使用率。
简单的办法是,在多核系统中,线程数少于核数即可。
【 在 ziqin 的大作中提到: 】
: asio目录里有一个priority strand的例子,可以基于那个改。
: 至于限定cpu占用,这个很难把,没有系统函数,如果只是绑定cpu,可以在生成thread的时候绑定。
:
--
FROM 221.218.62.*
尤其是在有超线程的时候,把线程数定义为实核数,这样,看起来CPU使用率很低,实际已经用满了。
这办法我用过。
例如,8核16线程,你就设置8线程,CPU利用率看起来就在50%以下,实际性能可以达到100%。
【 在 ylh1969 的大作中提到: 】
: 得有附加的开销吧?
: 确实有些项目要求限制CPU的使用率。
: 简单的办法是,在多核系统中,线程数少于核数即可。
--
修改:ylh1969 FROM 221.218.62.*
FROM 221.218.62.*
是的。cpu发现一个简单办法,用系统api就行了,比如windows的用job api就轻松搞定了(只是不支持win7和xp那种老系统),
因为需求是只限制进程的,不限制单个线程的
linux上得用cgroups
【 在 ziqin 的大作中提到: 】
: asio目录里有一个priority strand的例子,可以基于那个改。
: 至于限定cpu占用,这个很难把,没有系统函数,如果只是绑定cpu,可以在生成thread的时候绑定。
:
--
FROM 114.241.228.*
简单起见,我用 BOOST THREADPOOL.
【 在 z16166 的大作中提到: 】
: 以下是chatgpt给的:
:
: 在C++中,有几种高性能的线程池库可以选择,以下是一些常用且功能强大的开源线程池库,支持高性能并且具备取消任务操作的功能:
: ...................
--
FROM 218.76.62.*
用户态的限制cpu使用,没啥好的方式啊。还得用户自己估算一下计算复杂度,然后谨慎coding
【 在 z16166 的大作中提到: 】
: 是的。cpu发现一个简单办法,用系统api就行了,比如windows的用job api就轻松搞定了(只是不支持win7和xp那种老系统),
: 因为需求是只限制进程的,不限制单个线程的
: linux上得用cgroups
: ...................
--
FROM 58.246.3.*