问题标签 [context-switch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3081 浏览

c - 在 Linux 中监视上下文切换

有没有办法在不使用分析器的情况下确定何时发生上下文切换?我编写了一个 C 程序来监视程序中不同进程完成执行所花费的时间。我也想展示进程/线程上下文切换。切换发生的时间和从prev_id -> curr_id。这 3 个信息会有所帮助。

0 投票
10 回答
102842 浏览

multithreading - 线程上下文切换 Vs。进程上下文切换

谁能告诉我在这两种情况下到底做了什么?他们每个人的主要成本是多少?

0 投票
3 回答
864 浏览

multithreading - 双CPU机器上的线程协作

我记得在我上大学的一门课程中,我最喜欢的竞争条件示例之一是一个简单的main()方法启动两个线程,其中一个将共享(全局)变量递增一个,另一个递减它。伪代码:

教授接着问i一百万亿次运行后的价值是多少。(本质上,如果它永远不会是 10。)不熟悉多线程系统的学生在 100% 的情况下都会回答,该print()语句将始终报告i为 10。

这实际上是不正确的,因为我们的教授证明每个递增/递减语句实际上被编译(汇编)为 3 个语句:

因此, 的值i可能是 9、10 或 11。(我不会详细说明。)

我的问题:

我的理解是(是?)物理寄存器集是特定于处理器的。在使用双 CPU 机器时(注意双核和双 CPU 的区别),每个 CPU 是否都有自己的一组物理寄存器?我原以为答案是肯定的。

在单 CPU(多线程)机器上,上下文切换允许每个线程拥有自己的虚拟寄存器集。由于双 CPU 机器上有两组物理寄存器,这难道不会导致更多潜在的竞争条件,因为您实际上可以让两个线程同时运行,而不是在一个单一的“虚拟”同时运行 - CPU机器?(虚拟同时操作是指寄存器状态在每次上下文切换时保存/恢复。)

更具体地说 - 如果您在 8 CPU 机器上运行此程序,每个 CPU 有一个线程,是否消除了竞争条件?如果将此示例扩展为使用 8 个线程,在双 CPU 机器上,每个 CPU 有 4 个内核,竞争条件的可能性会增加还是减少? 操作系统如何防止step 3汇编指令在两个不同的 CPU 上同时运行?

0 投票
3 回答
693 浏览

c# - 如何在不发生上下文切换的情况下在线程中执行 2 个连续命令?

我有一个 C# 程序,它有一个“代理”类。该程序创建了几个Agent,每个Agent都有一个“ run() ”方法,它执行一个Task(即:Task.Factory.StartNew() ...)。
每个 Agent 进行一些计算,然后需要等待所有其他 Agent 完成计算,然后才能进入下一个阶段(他的动作将根据其他 Agent 的计算)。
为了让 Agent 等待,我创建了一个 CancellationTokenSource(命名为“tokenSource”),并且为了提醒程序这个 Agent 将要休眠,我抛出了一个事件。因此,两个连续的命令是:

(该事件被“AgentManager”类捕获,该类本身就是一个线程,第二个命令使代理任务线程休眠,直到收到取消令牌的信号)。

每次触发上述事件时,AgentManager 类都会捕获它,并将 +1 加到计数器上。如果计数器的数量等于程序中使用的 Agent 的数量,AgentManager(持有对所有 Agent 的引用)按如下方式唤醒每个 Agent:

现在我们遇到了我的问题:第一个命令由代理异步执行,然后由于线程之间的上下文切换,代理管理器似乎捕获了事件,并继续唤醒所有代理。但是-当前的代理甚至还没有达到第二个命令!因此,代理正在接收“唤醒”信号,然后他才进入睡眠状态,这意味着他被困在没有人唤醒他的情况下!有没有办法将两个连续的方法“原子化”在一起,所以不会发生上下文切换,从而在 AgentManager 有机会唤醒他之前强制 Agent 进入睡眠状态?

0 投票
6 回答
4791 浏览

windows - 在 Windows 中强制上下文切换

假设我有线程句柄或线程 ID,有没有办法强制 C++ 中的上下文切换到特定线程?

0 投票
1 回答
322 浏览

context-switch - 在进程上下文中是否考虑了用于执行上下文切换的 CPU 周期?

如果一个进程导致了很多上下文切换,那么上下文切换中使用的 CPU 周期是否会显示在进程 CPU 利用率中?
换句话说,如果我运行一个基本上重复执行系统调用的进程,那么由于从用户空间到内核空间的上下文切换增加,top的输出是否应该显示该进程的 CPU 利用率增加,反之亦然?

0 投票
1 回答
7435 浏览

c - Linux上同一进程的线程之间的上下文切换成本

关于 Linux 上同一进程的线程之间的上下文切换成本是否有任何好的经验数据(主要是 x86 和 x86_64)?我说的是一个线程在自愿或非自愿进入睡眠之前在用户空间中执行的最后一条指令与同一进程的不同线程在同一 cpu/核心上唤醒后执行的第一条指令之间的周期数或纳秒数.

我写了一个快速测试程序,它rdtsc在分配给同一个 cpu/core 的 2 个线程中不断执行,将结果存储在一个 volatile 变量中,并与其姊妹线程的相应 volatile 变量进行比较。第一次检测到姊妹线程的值发生变化时,它会打印差异,然后返回循环。我在 Atom D510 cpu 上以这种方式获得了大约 8900/9600 个周期的最小/中值计数。这个程序是否合理,数字是否可信?

我的目标是估计,在现代系统上,每个连接的线程服务器模型是否可以与选择类型的多路复用竞争甚至胜过选择类型的多路复用。这在理论上似乎是合理的,因为从对 fd 执行 IO 到 fd 的转换XY涉及在一个线程中休眠并在另一个线程中唤醒,而不是多个系统调用,但这取决于上下文切换的开销。

0 投票
1 回答
364 浏览

operating-system - 双向链表创建期间的上下文切换

Maurice Bach 的 The Design of the Unix Operating System 中有一个例子,它提到了双向链表在创建过程中如何由于上下文切换而被破坏。(他接着说,通过在代码的这些关键区域提高处理器级别可以防止这种情况发生,但我无法理解他试图首先显示问题的推理)他包含的示例代码如下如下:

他写的图表最初显示:

然后,显示最终状态:

我正在尝试遍历逻辑,但我不知道为什么代码会导致如图所示的损坏的双向链表。有人可以解释在上下文切换期间发生了什么导致这个问题吗?

(ps 会被标记为双向链表,但没有标签创建权限)

0 投票
1 回答
458 浏览

zend-framework - 用于 XML 的 Zend ContextSwitch 操作助手设置了错误的 Content-Type 标头

Zend 默认的 ContextSwitch Action Helper for XML 错误地将 Content-Type 标头设置为“application/xml”,而文档声称它将其设置为“test/xml”。

有没有其他人碰到这个。这是一个错误吗?谢谢。

zend 动作助手文档

0 投票
1 回答
4289 浏览

zend-framework - 使用 zend contextSwitch() Action Helper 下载文件

大家。我有类似的事情:我必须使用 Zend Framework 提供下载文件功能......几个小时的谷歌搜索对我没有帮助......所以这是我的控制器代码(注意:我是初学者):

PS:我用zend框架找到了这个下载文件,但我想用这种Zend方式。谢谢你们