C“中断” 与 JS“异步回调” 横向对比
在底层C语言中,有一个非常重要而特别的概念,叫做“中断”。用比喻来说,我正在写着博客,突然我妈打个电话过来,我就离开了键盘去接电话了,然后写博客就中断了,我聊完电话回来再继续写。乍一听似乎并没有什么大不了的是吧,似乎没什么好说的。那具体在程序中怎么表现的呢?一台电视正在放着节目,我用遥控器一按,它就不得不转过来处理红外遥控的信号,要不然微有差迟的话,遥控信号就过去了,也就遥控失灵了。只有处理了这个遥控,然后它才能再转回去处理它的视频和声音。这就是中断。
在JS中,也有一个非常重要而特别的概念,叫做“异步回调”。同样用比喻来说,我给经理发了封邮件,不可能一直晾在这里干等他回邮件吧,于是我先做其它的事情,等看到邮件通知了,我再回来处理这份邮件,这就是回调。在网页程序中,最常见的回调莫过于AJAX请求了,发出了一个请求,不能让浏览器一直卡死在那里一动也不能动就等着服务器发数据回来吧,这种一收一发一般也要一两秒钟,如果是这种一卡一卡地估计就没人想用了,所以现在浏览器中绝大多数都是使用回调。
“中断”和“异步回调”有一个很相似的地方,那就是都是放下正在做的事情,先转去做另外的事情,然后再回来处理。不同的是,“中断”是被外界打断现在做的事,紧急去处理了再回来继续做,而这个紧急处理一般来说要尽量简短、耗时非常少,比如前面的电视机总不能按一下遥控就黑屏静音了半秒钟吧,所以中断函数会要求写得尽量简短。而“异步回调”则是,我知道我要等一会才能得到答复,所以我先做着其它事情的一种主动式的行为转移,等得到答案了再回来处理原来的事情。据说NodeJS可接受的并发量很高,大概就是这个原因吧,数据库反应不过来就让它慢慢来,这些人都在我这里排着队,排完一队折回来又一队。而其它后端一般是同步的,数据库不够用的时候,就像队伍排到了门口但又不能折回来,后面来的就只能到大街上等吧。
说了这么一堆,那代码是个什么样子呢?下面这个就是一个典型的C51定时器中断程序,可以看到它有 interrupt 和 3 作为标识它是一个中断程序,序号为3。但其实还有非常重要的一点是,程序任何地方都不能调用这个函数,因为“中断”是一个由外部因素(这里是定时器计数满了)引发的一个行为,硬件机制会自动触发这个函数执行,如果又允许其它程序调用那将会导致混乱。
//Timer1中断服务程序
void time1Isr() interrupt {
//重装数值
TH1 = (-)/; //定时100us
TL1 = (-)%; //翻转IO口电平 发声
if (onBeep == ){
beepC++;
if (beepC >= ){
beepC = ;
BuzzerIO =! BuzzerIO; //这里是电平翻转哦,频率快的话就能听到声音了
}
} }
JS异步回调就常见了,就是把函数放在另一个函数的参数里。这,好像是类似于“函数指针”的东西?那是不是其它语言也可以在需要的时候使用这种“异步回调”的函数?
$.post("someURL", {key:"val", key2:"val2"}, function( result ){
console.log( result );
});
C“中断” 与 JS“异步回调” 横向对比的更多相关文章
- js异步回调Async/Await与Promise区别 新学习使用Async/Await
Promise,我们了解到promise是ES6为解决异步回调而生,避免出现这种回调地狱,那么为何又需要Async/Await呢?你是不是和我一样对Async/Await感兴趣以及想知道如何使用,下面 ...
- co.js异步回调原理理解
co.js是基于es6的generator实现的,相当于generator函数的一个自动执行器 generator的简单介绍 function* fn(){ before() yield firstY ...
- js异步回调
简单理解:js是单线程的,Ajax请求远程数据.IO等会很耗时,引起堵塞可能会引起反应时间太长页面失去反应. 回调:A函数作为一个参数传给B函数,执行完B后再执行A: 同步回调: function A ...
- 关于js 异步回调的一些方法
http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html
- 浅析JS异步执行机制
前言 JS异步执行机制具有非常重要的地位,尤其体现在回调函数和事件等方面.本文将针对JS异步执行机制进行一个简单的分析. 从一份代码讲起 下面是两个经典的JS定时执行函数,这两个函数的区别相信对JS有 ...
- Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比
Swoole 协程 MySql 客户端与 异步回调 MySql 客户端的对比 为什么要对比这两种不同模式的客户端? 异步 MySQL 回调客户端是虽然在 Swoole 1.8.6 版本就已经发布了, ...
- node.js 使用domain模块捕获异步回调中的异常
和其他服务器端语言相比,貌似node.js 对于异常捕捉确实非常困难. 首先你会想到try/catch ,但是在使用过程中我们会发现并没有真正将错误控制在try/catch 语句中. 为什么? 答案是 ...
- 避免多层回调,Node.js异步库Async使用(series)
未使用Async之前coffeescript写的代码: exports.product_file_add = (req,res) -> if !req.param('file_id') retu ...
- JS的异步回调函数
hi :)几日不见,趁着周末和父母在广州走走逛逛,游山玩水,放松身心,第一天上班就被一个问题难住了,不废话,以下是关于JS函数回调方面的知识,今天的查阅看的也是一知半解,摘录下来日后慢慢琢磨! js中 ...
随机推荐
- MongoDB Shard部署及Tag的使用
Shard部署 准备测试环境 为准备数据文件夹 Cd /home/tiansign/fanr/mongodb/Shard mkdir configdb1 configdb2 configdb3 mk ...
- SSRS报表连接超时的问题
这段时间遇到一个问题就是ReportService 中采用了远程连接的报表偶尔会断开连接,导致报表导出异常,查阅了很多资料,几天来就是断断续续的终于解决了这个问题,下面把一些解决的点一一展示出来,便于 ...
- mongoDB删除表中一个字段
使用update命令 update命令 update命令格式: db.collection.update(criteria,objNew,upsert,multi) 参数说明: criteria:查询 ...
- iNeedle系统使用注意事项
1.不能监控https协议的报文 目前只能监控http协议的网站,对于https协议(加密)的网站暂时不支持监控,甚至连流量都没有作统计,在测试iNeedle的时候也要多加注意.
- 描述Linux下软链接和硬链接的区别(计时2分钟)
在linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link). 1)默认不带参数情况下,ln命令创建的是硬链接. 2)硬链接文件 ...
- ICTCLAS中文分词库的使用
ICTCLAS计算所中文分词(当前最好的汉语词法分析器)系统特点:准确度高(98.5%),性能优越(500KB/s分词速度),词性标注(POS tagging)且支持多种标注集,支持用户自定义词典,支 ...
- Android学习笔记之AndroidManifest.xml文件解析(转)
//自已备注: <?xml version="1.0" encoding="utf-8"?>//说明了版本号,字符集 <manifest xm ...
- Jquery 的遍历,祖先、后代、同胞以及其过滤
什么是遍历? jQuery 遍历,意为“移动”,用于根据其相对于其他元素的关系来“查找”(或选取)HTML 元素.以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止. 下图展示了一个家族树. ...
- HDU 4866 Shooting(持久化线段树)
view code//第二道持久化线段树,照着别人的代码慢慢敲,还是有点不理解 #include <iostream> #include <cstdio> #include & ...
- 手动添加jar包到maven
废话不说,先上图,后说明: 1.登录系统 2.跟着箭头和方框走,一直到 Select Artifact(s) to Upload... 按钮 3.点击Select Artifact(s) to Upl ...