linux - sched_yield 减慢其他线程

标签 linux linux-kernel

我们有在循环中使用 sched_yield 的代码。当我们这样做时,我们似乎会降低其他线程的性能,特别是那些涉及内核调用(如 IO 和互斥/事件处理)的线程。我正在尝试确定此行为的确切原因。

过度调用 sched_yield 会导致内核出现瓶颈吗?

我怀疑如果我们一直要求内核检查它的进程列表,那么其他线程将受到影响,因为关键数据结构可能会不断被锁定——而如果我们不调用 sched_yield 那些内核锁往往是无可争议的。这是否有意义,或者重复调用 sched_yield 是否完全没问题。

最佳答案

看看 sched_yield Linux 手册页:

Avoid calling sched_yield() unnecessarily or inappropriately (e.g., when resources needed by other schedulable threads are still held by the caller), since doing so will result in unnecessary context switches, which will degrade system performance.

在紧密循环中调用它会导致问题。降低您调用它的速率。

(并检查您是否需要首先调用它。调度程序通常会自行完成正确的事情。)

如果您有一个低优先级线程,您可能会发现有兴趣研究的其他选项:

还是旧的nice当然是命令。

关于linux - sched_yield 减慢其他线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6807929/

相关文章:

linux - 如何在不执行脚本的情况下将脚本中的变量获取到 shell

c - 遍历内核模块中的所有模块

android - 如何使用 ADB shell 获取 HZ

linux - bash脚本curl请求中的转义变量

linux - bash 命令 XOR ^ 另一个命令

python - chmod 777 到 python 脚本

linux - 在将数据从内核复制到用户期间,非阻塞I/O是否会进入休眠状态?

linux - 如何从 apache 访问日志中分离出日期和时间字段?

profiling - Linux 内核中 Perf 事件子系统的性能开销

linux - 劫持 __NR_read 和 bash 崩溃(caf 用户?)