问题标签 [context-switching]

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 回答
474 浏览

assembly - 调用 printf 可以防止段错误

IT工程专业的学生在这里。我们被要求进行上下文切换,一项特定的任务让我们实现了一个相当粗糙的尝试/抛出系统。这是我们一直在编写的代码:

pctx 是一个指向包含两个 int 的简单结构的全局指针,f 是一个调用 throw() 并将一些返回代码 #define'd 发送到 42 的函数,而 main() 本质上是分配 pctx,result=try(f, 0)并打印结果。我们预计结果为 42。

现在,您可能已经在 throw() 中发现了 MAGIC PRINT。它在这里的原因尚不完全清楚;基本上,大多数(不是所有)学生都在 throw() 内部进行段错误;在这个函数中调用 printf() 使程序看起来正常工作,老师们认为任何系统调用都可以正常工作。

因为我并没有真正得到他们的解释,所以我尝试比较使用 gcc -S 为两个版本(有和没有 printf())生成的汇编代码,但我无法充分利用它。在 throw() 的左大括号(第 33 行)设置断点并使用 gdb 反汇编给了我这个:

没有 printf():

使用 printf():

我真的不知道该怎么做。显然事情的发生方式不同,但我发现在这两种情况下都很难理解发生了什么......所以我的问题本质上是:调用 printf 如何使 throw 不是段错误?

0 投票
0 回答
220 浏览

linux - 我的 linux 服务器“创建的进程数”和“上下文切换”增长得非常快

编辑:这里有更详细的答案:https ://serverfault.com/questions/454192/my-linux-server-number-of-processes-created-and-context-switches-are-growth

我的服务器有一个奇怪的行为:-/。是一个VPS。当我这样做时cat /proc/stat,我可以看到每秒如何创建大约 50-100 个进程并发生大约 800k-1200k 上下文切换!所有这些信息都与服务器完全空闲,没有流量或程序运​​行。

顶部显示 0 平均负载和 100% 空闲 CPU。

我已经关闭了所有不需要的服务(httpd、mysqld、sendmail、nagios、named...),但问题仍然存在。我也是ps -ALf每秒都做,看不到任何变化,ps每次只创建一个新进程,PID和之前一样+1,所以没有创建新进程,所以我认为进程增长cat /proc/stat必须是线程(是的,似乎也计算线程创建processes/proc/stat因为这表明:http ://webcache.googleusercontent.com/search?q=cache:8NLgzKEzHQQJ:www.linuxhowtos.org/System/procstat.htm&hl=es&tbo=d&gl=es&strip =1 )。

我已更改为/procdir 并完成cat [PID]\status了与ls(包括内核)列出的所有 PID,并且在任何进程中voluntary_ctxt_switches也没有nonvoluntary_ctxt_switches以相同的速度增长cat /proc/stat(仅几十/秒)。

我也完成strace -p PID了所有进程,因此我可以查看是否有任何进程正在创建线程或其他东西,但唯一有一点移动的进程sshread/write操作,因为数据正在发送到我的终端。

在那之后,我已经完成vmstat -s并看到它forks以同样的速度processes增长/proc/stat。正如http://linux.die.net/man/2/fork所说,每个人都会fork()创建一个新的 PID,但我的服务器 PID 没有增长!

我能想到的最后一件事是,所有的过程数据proc/statvmstat -s显示都与存储在同一台机器上的所有其他 VPS 共享,但我不知道这是否正确......如果有人能对此有所了解,我将不胜感激。

0 投票
1 回答
1064 浏览

c - 计算 ac 程序执行时上下文切换的次数

我想输出在执行我的程序时由 Windows 操作系统执行的上下文切换的数量。

0 投票
1 回答
339 浏览

sql-server-2008 - 自定义 sp_who/sp_whoUsers

我需要允许开发DW SQL 2K8R2环境中的客户端查看和终止进程,但我不想授予VIEW SERVER STATE此人(他是前 sql dba,被认为是潜在的内部威胁)。

当我运行以下命令时,它返回一行,就好像用户使用他们当前的权限自己运行 sp。

将“with execute as”更改为“self”(我是系统管理员)会返回相同的结果。我也尝试过以下而不是调用sp_who,它只返回一行。

select * from sysprocesses 在整个过程的执行过程中,上下文似乎没有切换或持续存在。这更不用说我将如何允许这个人“杀死”进程。

有人对这个看似独特的问题有解决方案或建议吗?

0 投票
1 回答
559 浏览

c++ - 最小化进程之间的上下文切换时间

我有 4 个进程共享一个公共信号量,所有进程都具有相同的优先级。锁内的临界区,具有读/写操作,包括 fflush() 调用。

在日志中,我观察到在从特定进程发出信号后,其他进程需要相当长的时间来获取锁。

由于所有 4 个进程都在同一点锁定,因此嵌入式设备存在性能问题。如果锁是线程间共享的,可以使用 pthread_cond_t 来最小化切换时间。现在,可以做些什么来最小化进程之间的切换时间?

0 投票
1 回答
3431 浏览

c++ - 在 C++ 中进入临界区和上下文切换

我是线程编程的新手(目前需要在公司项目中使用win32和c++),我只是想问一下进入关键部分是否意味着没有上下文切换?这是否意味着线程将锁定资源,直到它离开临界区?

另外,我目前正在阅读“Win32 中的多线程应用程序”一书,它看起来不错,但是对于新手学习 Win32 中的线程,是否有更好的阅读和更新的书?

非常感谢提前^_^

0 投票
2 回答
838 浏览

database - Grails - 基于用户切换数据源

我们正在开发一个 Grails Web 应用程序,其中需要将不同的用户(客户)指向仅包含其组织数据的不同数据库。不幸的是,分离的数据库是必需的,我们被要求只能为每个人提供一个 Web 应用程序。

但是,Grails 只需要一个数据源池连接到一个数据库。

我们希望能够根据登录的用户在每个会话中切换数据库连接,在 BootStrap init() 期间从属性文件中读取不同的连接。

到目前为止,我们一直无法找到似乎没有竞态条件的解决方案,没有我们可以找到的插件,而且它似乎也不是一个流行的问题。

我们最有希望的是创建一个自定义动态数据源,在 Bootstrap 中设置以定义一个组织->数据源的映射,并利用 Bootstrap 中定义的闭包在 GORM 行为之前找到合适的数据源,但这似乎会导致出现竞争条件是延迟。

有谁知道如何合法地执行这种切换?

谢谢

0 投票
2 回答
107 浏览

windows - 为什么要睡觉1?

我知道,在无限循环或其他地方,您可以 sleep(0) 让操作系统执行上下文切换并执行另一个线程(如果有并且它已准备好执行)。现在,我看到一堆代码,人们使用 sleep(1) 而不是 sleep(0)。

这是最优的吗?
我在哪里可以找到有关它的文档?

0 投票
2 回答
455 浏览

android - 如何在 TextSwitcher 中使文本可点击,以便它可以打开另一个活动?

我的应用程序中有一个文本切换器。一切正常。我的文本正在切换,但我想在单击文本切换器中的文本时打开另一个活动。我怎样才能在android中实现这一点?

提前致谢 :)

文本切换器的代码是...

0 投票
1 回答
466 浏览

c# - 当存在上下文切换时,获取锁的开销是否取决于操作系统计时器的分辨率?

假设线程 1尝试使用该语句获取lockObj对象上的锁lock(lockObj),但在线程 1 尝试获取该对象上的锁时,该对象已被线程 2锁定。线程 1 会阻塞,对吗?

现在假设在这个阻塞期间,有一个上下文切换,因为还有其他线程和应用程序等待运行。线程 1 再次处于运行状态并能够获取锁之前的经过时间是否取决于操作系统计时器分辨率(例如:Windows 7 上的默认 15.6 毫秒)?

如果上述问题的答案是肯定的,那么我还有一个疑问:

很容易创建一个简单的程序来测试Thread.Sleep(1)使用Stopwatch的平均开销,并得出结论它收敛到 OS 计时器分辨率(例如 15.6 毫秒)。但是我发现很难创建一个程序来为lock语句获得相同的结论。主要是因为:

1)很难保证试图获取锁的线程会一直阻塞(或者至少要在获取锁之前知道自己何时阻塞);

2)每当线程试图获取锁块时,我不知道如何强制进行上下文切换。当前运行的线程阻塞时是否总是有上下文切换?

任何帮助将不胜感激。