gpt4 book ai didi

asynchronous - 代码如何在同步的单核CPU上异步?

转载 作者:行者123 更新时间:2023-12-02 17:26:16 26 4
gpt4 key购买 nike

uniprocessor (UP) system 中,只有一个 CPU 内核,因此一次只能执行一个线程。这个执行线程是同步的(它获取队列中的指令列表并一条一条地运行它们)。当我们编写代码时,它会编译成一组 CPU 指令。

我们如何在 UP 机器上的软件中实现异步行为?难道一切不都是按照操作系统选择的固定顺序运行吗?

即使是 out-of-order execution CPU 给人一种按程序顺序运行指令的错觉。 (这与系统中其他内核或设备观察到的 memory reordering 不同。在 UP 系统中,运行时内存重新排序仅与设备驱动程序相关。)

最佳答案

中断处理程序是一段与其余代码异步运行的代码,可以响应来自 CPU 外部设备的中断。在用户空间中,信号处理程序具有等效的语义。

(或者硬件中断会导致上下文切换到另一个软件线程。就软件线程而言,这是异步的。)

网络数据包到达中断或磁盘 I/O 完成等事件相对于中断前 CPU 正在执行的操作异步发生。

异步并不意味着同时,只是它可以在其余代码的任意两条机器指令之间运行。用户空间程序中的信号处理程序可以在任意两条机器指令之间运行,因此主程序中的代码必须以一种在发生这种情况时不会中断的方式工作。

例如具有信号处理程序的程序不能对当前堆栈指针下方堆栈上的数据做出任何假设(即在堆栈的未保留部分)。 在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com