在看Node.js开发指南的时候看到下面这段话:
看看Node.js是如何解决这个问题的: db.query('SELECT * from some_table', function(res) { res.output(); }); 这段代码中 db.query 的第二个参数是一个函数,我们称为回调函数。进程在执行到 db.query 的时候,不会等待结果返回,而是直接继续执行后面的语句,直到进入事件循环。 当数据库查询结果返回时,会将事件发送到事件队列,等到线程进入事件循环以后,才会调 用之前的回调函数继续执行后面的逻辑。
但是看不懂这里说的:
进程在执行到db.query 的时候,不会等待结果返回,而是直接继续执行后面的语句,直到进入事件循环。
当数据库查询结果返回时,会将事件发送到事件队列,等到线程进入事件循环以后,才会调
用之前的回调函数继续执行后面的逻辑。
我个人的理解是: 所有的请求都是异步的,然后当所有的请求到达服务器的时候,对磁盘的I/O操作不会等待结果返回,而是直接执行回调函数,并不是直接返回给客户端,而是这时进入一个事件队列等待处理,而cpu和内存在同一时间只处理一件事,这个时候可能I/O操作已经得到返回值了,然后把返回结果也发送到刚才已经排在队列里面的回调函数,等到cpu处理到这里的时候它们已经有结果了,cpu就直接处理此事件, 打个比方: 客户端的请求就好比两个人A,B去买东西,A就是I/O,B就是回调函数,到达超市的时候A去货架上面选东西,而B这个时候并不和A一起去,而是一个人说我先去排队付款,你好了来找我我先占个位置,B就去排队了,而收银员在同一时间是只收取一个人的费用的,当A选完东西之后它会去找排队的B,一起排队等待收银员收取费用(也就是等待处理),收银员收取费用之后A,B就回家了,也就想当于处理了一次完整的请求返回给客户端,
不知道我的理解对不对?敬请各位大神指点下,