gpt4 book ai didi

linux - Linux下如何高效运行短小的异步任务?

转载 作者:太空狗 更新时间:2023-10-29 11:12:48 30 4
gpt4 key购买 nike

我正在尝试满足一项软实时要求,即在 Linux 下任务需要在 < 1 毫秒内完成。目前我正在使用具有 4 - 8 个线程的 pthreads 来尝试实现这一点,但似乎 Linux 下 pthreads 的开销和延迟不太适合短期任务(pthread_create< 的每个延迟约 100 µs pthread_join + 线程运行时的一些奇怪的非确定性行为,这可能会增加 100 - 200 µs。

所以我想知道是否有任何其他方法可以以相当低的延迟可靠地运行短的异步任务。这些任务通常 < 500 微秒,我需要它们全部在 1 毫秒内完成。我可以以某种方式直接使用内核线程(kthreads)吗(例如,将共享内存用于任务数据)?或者也许是基于中断的东西?


背景资料

我曾尝试在 Linux 上使用 pthreads 的调度选项。 SCHED_FIFOSCHED_RR 往往会使事情变得更糟,无论线程优先级如何。设置线程亲和性 (pthread_set_affinity_np) 有一点帮助,因为它减少了内核之间的线程迁移。

当前代码也已经在 Mac OS X(基于 BSD 和 Mach 内核)上进行了测试 - 它可以很好地与 pthreads 配合使用,并且很容易满足 < 1 ms 的要求。

Linux 上的 pthreads 似乎没有针对短时线程进行优化。根据本文:"The Linux Scheduler: a Decade of Wasted Cores" - Linux 上的 pthreads 存在许多问题,这些问题似乎是由于将多核支持引入 Linux 调度程序的随意方式引起的。我的问题似乎与论文中确定的四个问题中的任何一个都没有关系,但它确实表明 Linux 上的线程可能是一个 curate's egg。

最佳答案

听起来您只需要一个线程池。您可以让长期运行的工作线程从队列中执行任务,而不是为每个任务创建/销毁一个线程,例如多生产者多消费者模式。

我将从 Intel TBB Task Scheduler 开始.

关于linux - Linux下如何高效运行短小的异步任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36937011/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com