Wx::

异步与软中断

根据操作系统所学,中断分为外中断和内中断,这二者均为“硬中断”。而与之相对应则是“软中断”,即,不必由硬件产生中断源而引发的中断。

对于硬中断,在例如 I/O 的过程中,当输入设备将数据准备好并放至缓冲区中后,向处理器发出中断,处理器将转向执行相应的中断服务程序,以读入数据进行处理。

而对于软中断,与其类似,从概念上讲是采用软件的方法对中断机制进行模拟,实现了宏观上的异步执行。例如,信号便是一种软中断机制。

以 JavaScript 编程为例,以下为借助 Axios 库实现的一个异步 Http 请求的片段:

// 之前的一些操作...

axios
    .get("/api/studentInfo")
    .then(function(response){
        // 对服务器响应内容 response 进行处理
    })
    .catch(function(error){
        // 对响应错误进行处理
    });

// 之后的一些操作...

该片段为一个异步操作,形式上是常见的“应答”方式,即“请求”与“响应”。

与“同步”不同,该 Axios 发出的请求与其前其后的语句没有绝对的时序关系,不需阻塞式地等待该请求完成才继续之后的指令。

实际上,直到服务器端发回响应,才触发 .then() 和可能的 .catch() 方法进行处理,而该过程正类似于系统中断过程:处理器向外设发出命令(对应于 .get() 请求),外设准备好数据(对应于服务器返回数据)后,向处理器发出中断请求,处理器通过“中断描述符表”(类似 .then().catch())找到相应的中断服务程序(类似 .then().catch() 内的回调函数 function())来处理。

只不过此时中断源并非硬件而是程序本身,信号接收者也不是处理器而也是程序本身。形式上也有所区别。
(某些情况下,JavaScript 程序在异步方法执行到特定情况时主动调用回调函数,而操作系统中硬中断或软中断需要在特定情况下查询是否有中断请求。)


若有缺漏错误,还望指出哈~

0

评论(0

评论 取消
验证码:
搜索