- 主题:有没高效率的线程池实现?
以下是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.*
可能得自己定制一个。有一些奇葩需求,比如要修改线程优先级,限定cpu占用率等等
--
FROM 114.241.228.*
是的。cpu发现一个简单办法,用系统api就行了,比如windows的用job api就轻松搞定了(只是不支持win7和xp那种老系统),
因为需求是只限制进程的,不限制单个线程的
linux上得用cgroups
【 在 ziqin 的大作中提到: 】
: asio目录里有一个priority strand的例子,可以基于那个改。
: 至于限定cpu占用,这个很难把,没有系统函数,如果只是绑定cpu,可以在生成thread的时候绑定。
:
--
FROM 114.241.228.*
os在调度器那里实现的。
【 在 freecutelei 的大作中提到: 】
: 用户态的限制cpu使用,没啥好的方式啊。还得用户自己估算一下计算复杂度,然后谨慎coding
--
FROM 114.241.228.*
靠谱得很,调度器不给分配时间片就行了。业务层只要自己设定百分比即可。
【 在 freecutelei 的大作中提到: 】
: 不靠谱啊。。。。os又不知道app的业务逻辑
:
--
FROM 114.241.228.*
各自需求不同。
我只需要保证比如我的产品最多占用80%,给别人的产品留20%。
至于我的产品里哪个进程/线程占得多,内卷吧,自己优化去。
【 在 freecutelei 的大作中提到: 】
: 那只适合集中式研发。比如有统一全局的架构师有话语权进行相关设计。
: 现实研发情况,基本都是各自为政分别甩锅。没人承诺跑到对应百分比的,都甩锅抱怨分配不合理。
--
FROM 114.241.228.*
客户端需求,哈哈
不能把客户端的机器的cpu占高了,不然被投诉
但其实这个在技术上未必有用,因为有的人对占用50%介意,有的人对5%~10%的占用也会感到不满。
有的笔记本电脑在10%左右风扇已经呼呼响了
【 在 hgoldfish 的大作中提到: 】
: 这种需求,多半是跑在 linux 服务器的需求是吧?
: 或许不要在自己应用层去处理,而是使用 linux 的 docker,可以配置使用的 CPU 时间比例,它底层使用的是 cgroups 来控制。
:
--
修改:z16166 FROM 114.241.228.*
FROM 114.241.228.*