问题标签 [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 投票
2 回答
1136 浏览

c# - 如何测量进程上下文切换所用时间的近似值?

是否有可能测量 C# 中进程上下文切换的大致时间?如果是,如何?

我根据《Cracking the Coding Interview: 150 Programming Questions and Solutions 》一书提出了这个问题。

他们的解决方案是:

假设只有 2 个进程,P1 和 P2。(是一个巨大的近似值,我相信还有更准确的)

P1 正在执行,P2 正在等待执行。在某些时候,操作系统必须交换 P1 和 P2 - 假设它发生在 P1 的第 N 条指令处。因此,上下文切换时间为:

其中一个问题是我们无法记录过程中每条指令的时间戳。而且我们不考虑其他进程之间的上下文切换所花费的时间。

0 投票
1 回答
289 浏览

c++ - 覆盖的定时器中断不能正常工作

我正在为我的大学开发一个小内核作为项目。我已经覆盖(不确定这是否是正确的表达式)一个定时器中断例程。

在第一次上下文切换之前它运行良好。上下文切换在 dispatch() 中,当进程使用其所有指定时间(超时)时调用它。

我的例程在主进程开始之前被初始化,它应该在它完成后恢复(虽然我从来没有这样做过)。我还尝试在每次启动进程时初始化它,并在上下文切换或进程结束时恢复它。我尝试了这个,因为我有一个 2005 年完成的项目(略有不同),我期待它的想法,而不是复制粘贴。

定时器中断:

初始化新程序和恢复旧程序:

我运行的过程:

//mod 就像 id

当我运行程序时,我得到:

init Test1 time:0 //从进程一开始,表示已经开始,允许运行2个周期,当前时间为0

0 //定时器程序开始时的当前时间

1 //定时器程序开始时的当前时间

Test2 time:2 //从进程二开始,已经开始,允许运行2个周期,当前时间如预期为2

我已经把 cout << System::currentTime; 在 br++ 之后的 run() 中。我得到的是“2”被打印到无穷大。这表明 currentTime 没有增加,这意味着我的计时器例程不再被调用。

我从各个角度看待这个问题,尝试了各种方法,但都没有奏效。任何想法都值得赞赏。[:

0 投票
1 回答
785 浏览

linux-kernel - Executing block of code without context switch

Is there any way to execute a block of code in C without suffering a Context Switch?

I have modified perf stat to sample the counters periodically. While this works, it ends up giving me some bad data points such as 0 cycles x instructions.

I believe that the reason for this happening is because of context switching.

Since my code always pulls cycle counter value before instruction counter, if a context switch were to happen after pulling the cycle counter value, and if the process I was profiling executed for some portion of the scheduling quanta, then when I finally pulled the instruction counter value, it would be 'one ahead' of the cycle counter value that I already pulled.

Is there any way to execute the code-block without allowing a context switch to take place?

0 投票
0 回答
1901 浏览

linux - Linux 线程切换开销与进程切换开销

我很欣赏在 Linux 下,线程被映射到进程。我不清楚的是线程切换开销和使用本机 POSIX 线程库(即内核> = 2.6)的进程切换开销之间的大小差异,而且我在找到量化差异的消息灵通的文章时遇到问题。

这里有没有人有有用的参考来量化?

谢谢!

0 投票
2 回答
1439 浏览

c++ - 线程本地和上下文切换

我有一些使用线程本地存储的 C++ 代码,每个线程都有一个可以将数据推入的向量。

我使用 TLS 存储每个线程的索引 ID,这可用于查找将数据推送到哪个向量。然后它执行大量代码,将数据推送到向量中。

我想知道的是,操作系统是否有可能在获取指向线程本地对象的指针后重新安排我的代码在不同的线程上执行。(到目前为止,代码执行得很好,我还没有看到这种情况发生)。但是如果可能的话,这似乎肯定会破坏我的程序,因为现在两个线程可以拥有相同的对象。

假设这是真的,即使对于使用任何复杂性 TLS 的任何代码,这似乎也是一个问题,TLS 是否仅适用于您不获取地址的简单对象?

谢谢!

0 投票
1 回答
1248 浏览

c - makecontext uc_link 给出分段错误

我正在尝试制作像 pthreads 这样的用户级线程库。我正在使用makecontext() / swapcontext()在线程之间进行切换,并且在为线程创建上下文时,我将uctx_main传递给上下文中的uc_link字段。

但是,当我的线程终止时,它会给我一个分段错误。我的主程序仍在运行。

另外,有人可以解释一下uctx_main是什么吗?它是主要功能的默认上下文吗?我需要为我创建的每个线程都有一个uctx_main吗?很抱歉问了这么愚蠢的问题,但我在谷歌上没有找到任何东西。

0 投票
1 回答
396 浏览

zend-framework2 - ZF2 相当于 Zend_Controller_Action_Helper_ContextSwitch?

我在 Zend Framework 2 中找不到类似的东西。

0 投票
0 回答
522 浏览

signals - 将 swapcontext 与信号处理程序一起使用

我正在尝试构建像 pthreads 这样的用户级线程库。

我想在信号处理程序中使用 swapcontext。但由于它不是信号安全功能,因此不建议使用它。有人可以建议如何在信号处理程序中使用它。我可以通过禁用信号来使用它吗?

也有人可以解释一下信号安全功能的确切含义吗?

0 投票
1 回答
116 浏览

c - 每次上下文切换后立即运行一个函数,在 windows-XP 下的 C 中

我在 windows-XP 下用 C 语言编写一个多线程应用程序。我正在寻找一种方法来运行一个函数,就在应用程序线程之间的每次上下文切换之后(并且就在新线程开始之前)。更准确地说,我想在某个内存地址中分配一个不同的值,具体取决于我进入的线程。

有什么建议么?

0 投票
1 回答
861 浏览

c++ - 通过 sigsetjmp 和 longsetjmp 恢复环境

我使用 sigsetjmp 和 singlongjmp 和 SIGALARM 来中断系统调用,如下代码所示

在 sigsetjmp 返回 1 之前,使用对象和方法指针的调用:*pt2Object.*fpt("timeouted before sigsetjmp") 是可以的,但是在 sigsetjmp 返回 1 之后,此调用失败。检查变量的状态后,我注意到对象指针“pt2Object”仍然可以,但方法指针“fpt”似乎有所不同。

我认为造成这种情况的一个可能原因是 sigsetjmp 无法恢复整个早期环境,其中包括方法指针“fpt”。

你们能帮我解决这个问题吗?非常感谢!