标签: threads

在linux下,如何查明某个特定线程是否以实时优先级运行?

我有一个运行多个线程的进程(jackd)。它运行的线程之一应该是实时的,其他线程按正常优先级运行。我想检查它是否真的实时运行。我可以使用什么程序来完成此任务?

linux priority real-time threads

5
推荐指数
1
解决办法
1万
查看次数

为什么在线程之间切换比在进程之间切换并在它们之间共享数据更快?

为什么在线程之间切换比在进程之间切换并在它们之间共享数据更快?例如,在 ubuntu 上运行的 apache web 服务器可以使用 Prefork MPM(产生多个子进程)或 Worker MPM(为单个进程创建多个线程)。

linux process threads

4
推荐指数
1
解决办法
8410
查看次数

更改 Windows 线程调度程序时间片

这个问题是关于将 Windows 内核调整为像操作系统一样实时的可能性,以及实现它的方法。这是一个非常具体的狭窄主题,需要深厚的知识水平——你要么知道,要么不知道。

我在 WS2016 x64 平台上,我只能将计时器分辨率设置为 500us(0.5ms),调用库NtSetTimerResolution()中的函数ntdll.dll。我猜想这个值与调度程序时间片有关。

但是,我想将其增加到 100us。测量可能涉及在循环内多次调用包装NtDelayExecution()调用,然后分析抖动、标准偏差等统计数据。QueryPerformanceCounter()

这该怎么办呢?是否有任何注册表/文件调整,我可以在其中设置任意 Windows 调度程序时间片?


附言。有些人可能会问“为什么需要它? ”,或者说“不要这样做,这是错误的! ”。我预见到了这种想法,并会提前回答。

  • 这只是软件实验。它只是为了测试这样做的可能性和物理结果。
  • 我知道这可能会导致潜在的问题,例如在上下文切换上浪费额外的 cpu 时间、系统不稳定、不负责任、数据丢失以及它可能导致的任何问题。我接受提前这样做的任何负面后果并承担所有责任。即使我的机器会冒烟和火花:)
  • 根据谷歌搜索或在这里搜索 - ofc 我已经做到了,但未能找到有用的信息,因为这个主题非常狭窄,与操作系统调度程序的功能有关。在任何 Windows 机器上做几乎没有意义。我知道我不能把它变成实时的。该网站搜索“sheduler timeslice”没有给出结果。

windows timer threads windows-10

4
推荐指数
1
解决办法
5485
查看次数

3
推荐指数
1
解决办法
2万
查看次数

无法编辑 /proc/sys/kernel/threads-max

我目前正在构建一个压力测试工具,因此我需要大量的线程。我已经完成了所有设置以提高限制,但最后一个设置,系统范围的上限/proc/sys/kernel/threads-max,我似乎无法更改。

我试过

sysctl -w kernel.threads-max=200000
Run Code Online (Sandbox Code Playgroud)

使用nano或手动编辑echo

echo 200000 > /proc/sys/kernel/threads-max
Run Code Online (Sandbox Code Playgroud)

编辑/etc/sysctl.conf和运行

sysctl -f
Run Code Online (Sandbox Code Playgroud)

如果我将它们作为 运行sudo,则不会显示错误(甚至显示新值),但是再次检查时,该值也没有更改。尝试使用 编辑值时gedit,它会吐出一个

无效的论点”

无论我尝试什么价值,即使是最初的价值。我更改pid_max值没有问题。

我真的不知道为什么它拒绝我的编辑,而且我找不到任何有类似问题的人,所以如果有人能解释发生了什么,我将不胜感激。

linux kernel threads ubuntu

3
推荐指数
1
解决办法
5691
查看次数

Windows 10中每个进程的最大线程限制?

我有一个使用线程的程序。我想知道 Windows 10 中每个进程的最大线程数限制是多少,或者 Windows 10 可以处理的最大线程数是多少?

windows threads windows-10

3
推荐指数
1
解决办法
1万
查看次数

如何防止自己在编译时意外指定太多线程?

当我编译东西时,我通常想快速完成,所以在我的工作站上我发出

make -j16
Run Code Online (Sandbox Code Playgroud)

并且 (gnu) make 开始使用 16 个内核进行编译。但是,当我回到笔记本电脑上时,那里没有 16 个内核。因此,当我在那里发出相同的命令时,我的机器会死机。我无法通过 CTRL+ALT+F1 等切换到备用终端,远程登录也不会成功。CTRL+C, CTRL+4 都不考虑。(顺便说一句:没有自动杀死会成功,例如自动内存不足)然后我必须关闭我的机器。(我使用带有内核 3.0.x 的 Ubuntu 11.10)

一种解决方案是预先获得当前机器上可用的内核数量,并使用一个小的 make 目标,而任何其他“并行”目标都依赖于并且不直接使用“make -j $NUMCORES”。(我已经这样做了,并通过一个使用 boost 线程的小型 c++ 程序实现了)。但这不会保护我不小心再次指定“make -j16”。

此外,“太多”内核不能与可用内核数量(包括线程内核)相同,因为 +1 或 +2 线程仍然不会杀死机器。

我可以使用 ulimits 来缓解这个问题吗?我想指定将交换空间设置为 0。然后我应该改变中止我

freeze make threads

2
推荐指数
1
解决办法
558
查看次数

有没有办法“破解”Windows 10 以在一项任务或进程中使用其整个 CPU 能力?

我使用 Blender 之类的应用程序,并且根据“任务管理器”和“资源监视器”,当我渲染视频时,Windows 使用不到 40% 的 CPU(最多,使用下面的选项)和不到 30% 的内存。我不会在渲染时将其余资源用于任何其他事情。有没有办法指示 Windows 使用其全部功能?

我试过改变优先级,它不会明显改善。

我尝试改变对一个(核心)CPU 的亲和力,它确实提高了(渲染速度加倍)。有人知道任何其他“黑客”吗?

windows priority threads affinity

2
推荐指数
1
解决办法
2233
查看次数

如何获取Win8中正在运行的进程的线程数?

Win8中如何在任务管理器中显示列出正在运行的进程的线程数的列?视图菜单似乎没有任何允许添加的选项,也没有右键单击列标题。如果此功能在 Win8 中不可用(为什么是 MS?),有哪些替代方案?

我确实在Win7上遇到过同样的问题,但该问题的解决方案不适用于win8。

task-manager threads windows-8

2
推荐指数
1
解决办法
2890
查看次数

是否可以合并CPU核心?

过去有一种称为超线程的技术,其中单个 CPU 核心的作用就像两个核心一样。

但是是否有可能将两个 CPU 核心合并为一个,以提高未充分使用多核心的程序的性能?(从老游戏到X Plane 11)

cpu cpu-usage multi-core threading threads

2
推荐指数
1
解决办法
6019
查看次数