- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 uniprocessor (UP) system 中,只有一个 CPU 内核,因此一次只能执行一个线程。这个执行线程是同步的(它获取队列中的指令列表并一条一条地运行它们)。当我们编写代码时,它会编译成一组 CPU 指令。
我们如何在 UP 机器上的软件中实现异步行为?难道一切不都是按照操作系统选择的固定顺序运行吗?
即使是 out-of-order execution CPU 给人一种按程序顺序运行指令的错觉。 (这与系统中其他内核或设备观察到的 memory reordering 不同。在 UP 系统中,运行时内存重新排序仅与设备驱动程序相关。)
最佳答案
中断处理程序是一段与其余代码异步运行的代码,可以响应来自 CPU 外部设备的中断。在用户空间中,信号处理程序具有等效的语义。
(或者硬件中断会导致上下文切换到另一个软件线程。就软件线程而言,这是异步的。)
网络数据包到达中断或磁盘 I/O 完成等事件相对于中断前 CPU 正在执行的操作异步发生。
异步并不意味着同时,只是它可以在其余代码的任意两条机器指令之间运行。用户空间程序中的信号处理程序可以在任意两条机器指令之间运行,因此主程序中的代码必须以一种在发生这种情况时不会中断的方式工作。
例如具有信号处理程序的程序不能对当前堆栈指针下方堆栈上的数据做出任何假设(即在堆栈的未保留部分)。 red-zone在 x86-64 SysV ABI 中,仅针对用户空间对该规则进行了修改,因为内核在将控制权转移到信号处理程序时可以遵守它。内核本身不能使用红区,because hardware interrupts write to the stack outside of software control, before running the interrupt handler .
在 I/O 完成可以导致 POSIX 信号传递的操作系统中(即使用 POSIX 异步 I/O),信号的时间可以很容易地由硬件中断的时间确定,因此用户-空间代码与计算机外部事物确定的时间异步运行。这不仅仅是内核的问题。
在多核系统上,显然有更多的方式让事情在更多的时间以不同的顺序发生。
关于asynchronous - 代码如何在同步的单核CPU上异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38466042/
据我了解: Programming to leverage multicores or multiple processors is called parallel programming. 但是如果
据我了解: Programming to leverage multicores or multiple processors is called parallel programming. 但是如果
我可以在单核 cpu 的机器上使用 OpenMP 吗?性能会有一些提升? 最佳答案 是的,你可以。您可以使用 OpenMP 指令注释代码并仍然按顺序运行应用程序。为此,您必须在没有 OpenMP 标志
有很多关于内存屏障的信息。大多数信息是指多核或多处理器架构。 Stackoverflow 上的某个地方还指出,单核处理器不需要内存屏障。 到目前为止,我找不到任何明确的解释,为什么单核 CPU 上不需
“如果您能感觉到计算机的操作每隔几毫秒就会自行切换数十项任务,您肯定会同意计算机似乎在同时执行这些任务,即使我们知道计算机是交错的各种任务的计算” M.Ben-Ari,并发编程原理,1982 年。 那
我知道自旋锁与自旋一起工作,存在不同的内核路径并且内核是抢占式的,那么为什么自旋锁在单处理器系统中不起作用? (例如,在 Linux 中) 最佳答案 如果我理解你的问题,你会问为什么自旋锁在单核机器上
在使用像 Erlang 和其他具有轻量级并发进程的语言之后,我发现很难理解它是如何转化为 Java 的。鉴于我使用单核机器,有没有办法执行多个并发 IO 绑定(bind)操作(http)? 我发现如下
在 Java 中,Volatile 和 synchronized 使得多线程可以协同工作,也可以相互理解。但是,如果你在单核系统上使用多线程,就意味着不是真正的多线程工作,操作系统只是从这个线程到另一
我已经构建了一个大型的 AngularJS 应用程序,到目前为止它运行良好。 当一些用户(使用具有一个 CPU 的非常老的计算机)提示应用程序非常慢时,我的问题就开始了。 我打开了任务管理器,我可以看
我已阅读并详细了解 Java volatile 和 synchronized 关键字在基于 SMP 架构的 CPU 中 cpu 级别的含义。 这里有一篇关于该主题的优秀论文: http://irl.c
我是一名优秀的程序员,十分优秀!