首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Linux下高效地运行短异步任务?

如何在Linux下高效地运行短异步任务?
EN

Stack Overflow用户
提问于 2016-04-29 11:19:59
回答 2查看 750关注 0票数 3

我试图满足一个软的实时需求,在Linux下,任务需要在<1ms内完成。目前,我正在使用4-8线程来尝试实现这一目标,但是在Linux下使用p线程的开销和延迟似乎不太适合短期任务(在线程运行时,pthread_createpthread_join的延迟时间分别为100 s和100 s+一些奇怪的非确定性行为,可以增加100到200秒)。

因此,我想知道是否还有其他方法可以可靠地运行短异步任务,并且延迟相当低。任务通常是< 500 s,我需要它们都在1ms内完成。我是否可以以某种方式直接使用内核线程(k线程)(例如,对任务数据使用共享内存)?或者是基于中断的东西?

背景信息

我已经尝试过在Linux上使用线程来处理调度选项。无论线程优先级如何,SCHED_FIFOSCHED_RR都会使情况变得更糟。但是,设置线程亲和力(pthread_set_affinity_np)有点帮助,因为它减少了内核之间的线程迁移。

当前的代码也在Mach上进行了测试(Mach基于BSD和Mach内核)--它可以很好地处理p线程,并且很容易满足<1ms的要求。

看来Linux上的线程在短时间线程方面没有得到很好的优化。根据本文的观点: Linux上的:十年浪费的核心线程存在许多问题,这似乎是由于在Linux调度程序中引入了多核支持的杂乱无章的方式造成的。我的问题似乎与论文中指出的四个问题中的任何一个无关,但它确实表明,Linux上的线程可能是一个牧师的蛋。

EN

回答 2

Stack Overflow用户

发布于 2016-04-29 14:00:34

在Linux下,任务需要在<1ms内完成

听着,这似乎不是很严格的要求。有许多低延迟的金融软件面临着更严格的要求。

互联网上有很多关于编写低延迟软件的建议,例如:

  1. 0.pdf
  2. https://codedependents.com/2014/01/27/11-best-practices-for-low-latency-systems
  3. https://www.quora.com/How-does-one-become-a-low-latency-programmer
  4. https://www.linkedin.com/pulse/mentor-low-latency-c-code-joe-ellsworth

由于您在问题中提到了创建和删除线程,我认为您的中断了其中一个(将上下文切换降到最低)。我认为您应该让一个或几个线程忙着等待,而不是创建和加入。

票数 1
EN

Stack Overflow用户

发布于 2016-04-29 15:16:03

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

我会从Intel TBB任务计划程序开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36937011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档