问题标签 [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.
c# - Azure ServiceBus & async - 是,还是不是?
我在 Azure 上运行服务总线,每秒发送大约 10-100 条消息。
最近我已经切换到.net 4.5并且所有人都兴奋地重构了所有代码以在每行中至少有两次“async”和“await ”,以确保它“正确”完成:)
现在我想知道它实际上是好还是坏。如果您可以查看代码片段并让我知道您的想法。我特别担心如果线程上下文切换没有给我带来更多的痛苦而不是好处,从所有的异步中......(看看!dumpheap 这绝对是一个因素)
只是一点描述 - 我将发布 2 种方法 - 一种在 ConcurrentQueue 上执行 while 循环,等待新消息,另一种方法一次发送一条消息。我也完全按照 Azure 博士的规定使用瞬态故障处理模块。
发送循环(从头开始,等待新消息):
发送消息:
上面的代码来自每秒发送 1 条消息的“Sender”类。在任何给定时间我都有大约 50-100 个实例在运行,所以它可能是相当多的线程。
顺便说一句,不要担心 EnsureMessageSender、RecreateMessageFactory、EnsureTopicExists 太多,它们不会经常被调用。
如果我只需要一次发送一条消息,而不用担心异步内容并避免随之而来的开销,那么让一个后台线程处理消息队列并同步发送消息不是更好吗?
请注意,将一条消息发送到 Azure 服务总线通常只需几毫秒,这并不昂贵。(除了速度很慢、超时或服务总线后端出现问题时,它可能会在尝试发送内容时挂起一段时间)。
感谢和抱歉这么长的帖子,
斯蒂沃
建议的解决方案
这个例子可以解决我的情况吗?
operating-system - 上下文切换和操作系统调度程序算法
因此,当一个进程切换到另一个进程时,我理解它的方式,内核将保存进程的当前状态,然后操作系统调度程序算法将选择下一个要交换的进程。这个算法本身是否不需要加载因为它是一个过程?如果是,内核本身在执行切换时是否使用 CPU 时间内核如何在上下文切换中访问 CPU 周期?
提前致谢。
c - 进程切换何时发生
我对两个进程之间的进程切换感到困惑。使用fork创建新进程时,适用于进程之间切换的一般规则是什么。只有当一个进程进入空闲状态时?我有几个疑问
- 当父母和孩子都处于无限循环并且只有打印指令(没有睡眠方法)时会发生什么
- 一般规则是什么?
client-server - 那么客户端-服务器分离的设计不是X Window的瓶颈吗?
在这个答案中,它提到:
人们还听说 X 使用“网络”并认为这将成为性能瓶颈。这里的“网络”是指本地 UNIX 域套接字,它在现代 Linux 上的开销可以忽略不计。在网络上会成为瓶颈的东西,有 X 扩展来加快速度(共享内存像素图、DRI 等)。进程中的线程不一定比 X 套接字快,因为瓶颈更多地与协调多个线程或进程访问同一硬件的固有问题有关,而不是与本地套接字的最小开销有关。
我不明白。我一直认为多线程通过共享变量进行通信应该比多进程通过 Unix 域套接字进行通信要快。所以……我错了吗?协调多个线程是一项耗时的工作吗?进程如何调度的顺序根本不会影响 Unix 域套接字的性能吗?
任何想法?请...
对不起,我没有把问题说清楚。我想问的是 IPC 效率而不是 X Window/Wayland 系统。
我只想知道为什么UNIX域套接字可以比共享内存快?AFAIK,共享内存是进程和线程之间最原始的通信方式,不是吗?所以 UNIX 域套接字应该建立在共享内存机制之上(伴随着适当的锁定)。为什么一个学生(即 Unix 域套接字)可以胜过他的老师(即共享内存)?
linux - 多核 Linux 内核中的上下文切换
如果需要在多核处理器机器的多个内核上并行执行,Linux 内核是否会同时执行多个上下文切换?有什么参考吗?
c# - Prevent context-switching in timed section of code (or measure then subtract time not actually spent in thread)
I have a multi-threaded application, and in a certain section of code I use a Stopwatch
to measure the time of an operation:
Now, the problem is if the program switches control to another thread somewhere else while the stopwatch is started, then the timed duration will be wrong. The other thread could have done any amount of work before the context switches back to this section.
Note that I am not asking about locking, these are all local variables so there is no need for that. I just want the timed section to execute continuously.
edit: another solution could be to subtract the context-switched time to get the actual time done doing work in the timed section. Don't know if that's possible.
multithreading - 为什么每次与互斥锁同步时都会发生线程上下文切换?
我有多个线程在紧密循环中更新单个数组。(双核处理器上的 10 个线程 @ 每秒大约 100000 次更新)。每次在互斥锁(WaitForSingleObject / ReleaseMutex)的保护下更新数组。我注意到没有线程对数组进行两次连续更新,这意味着必须有某种与同步相关的产量。这意味着每秒发生大约 100000 次上下文切换,这似乎是次优的。为什么会这样?
operating-system - 上下文切换问题:操作系统的哪一部分参与管理上下文切换?
我被要求回答这些关于操作系统上下文切换的问题,这个问题非常棘手,我在教科书中找不到任何答案:
- 在特定时间,系统中存在多少 PCB?
- 哪两种情况会导致上下文切换发生?(我认为它们是进程的中断和终止,但我不确定)
- 硬件支持可以改变切换所需的时间。两种不同的方法是什么?
- 操作系统的哪一部分参与管理上下文切换?
c++ - 非自愿上下文切换的原因
我正在尝试分析我在一台大型机器(32 核,256GB RAM)上编写的多线程程序。我注意到在两次运行之间,程序的性能可能会有很大差异(70-80%)。我似乎无法找到程序性能出现这种巨大差异的原因,但是通过分析大量运行的“时间”实用程序的结果,我注意到非自愿上下文切换的数量与程序性能(显然,更少的上下文切换会带来更好的性能,反之亦然)。
有什么好的方法可以确定是什么导致了这种上下文切换?如果我能找到罪魁祸首,那么也许我可以尝试解决问题。但是,我对可以使用的工具有一些特殊限制。首先,我在这台机器上没有 root 权限,所以任何需要这种权限的工具都没有了。其次,它是一个相当老的内核(RHEL5,内核 2.6.18),所以一些标准的性能事件可能不存在。无论如何,任何关于如何更深入地挖掘上下文切换原因的建议都将不胜感激。
更新:我决定在另一台(更小的)机器上测试我的程序。另一台机器是一个 4 核(带有超标题)的 linux 机器,具有 8Gb 的 RAM,以及一个更新的内核——另一台机器上的 3.2.0 与 2.6.18。在新机器上,我无法重现双模式性能配置文件。这让我相信这个问题要么是由于硬件问题(正如评论中所建议的那样),要么是由于内核级别的一个特别病态的情况,该情况已被修复。我目前最好的假设是,这可能是因为新机器有一个带有完全公平调度程序 (CFS) 的内核,而旧机器没有。有没有办法测试这个假设(告诉新机器使用不同/旧的调度程序)而不必为新机器重新编译一个古老的内核版本?
android - 是否可以减少上下文切换时间
MediaRecorder.start() 需要很多时间。Method Profiling 说“上下文切换”-Inclusive Real Time 是 100%,大约需要 1510 毫秒。有没有可能以某种方式减少它?我需要它尽可能快。