“你知道什么是同步阻塞吗”,当然知道了。“那你怎么看它呢”,这个。。。
在同步阻塞的世界里,代码执行到哪里,数据就跟到哪里。如果数据很慢跟不上来,代码就停在那里等待数据的到来,然后再带着数据一起往下执行。
可以说是,代码执行和数据是结伴而行,不离不弃。执子之手与子偕老。让人老感动了。
如果还不太理解的话,可以认为代码执行其实就是一些行为动作,这些行为动作的目的就是为了获取/操作数据。
例如加法,这里的行为动作就是执行相加,数据就是加数和被加数。操作结果就是得到了另一个数据,即两个数的和。
只是在这个加法里,数据跑的特别快,(CPU的寄存器,能不快吗),我们几乎觉察不到执行动作在等数据的过程。怎么办呢,那就看一个能把它们拉开的例子。
那自然非数据库查询莫属了,既有网络I/O,又有磁盘I/O,肯定会慢一些。
假设我的业务是这样的,代码先去数据库查询一个用户,接着修改用户的密码,然后再更新回数据库,最后代码返回成功。
如果网速和数据库都很慢的话,可能是这样的。代码执行一个查询数据库动作,然后等啊等啊等,等的花都谢了,终于数据库把用户返回过来了,接着,代码飞快的修改了密码,并执行一个更新数据库的动作,然后又是等啊等啊等,等的花又开了,数据库终于回话了,更新成功。然后代码返回成功,全部执行完了。
所以同步阻塞代码的最大特点就是,带着数据上路,数据不到位就阻塞住。
最后来个小小的升华:
所谓同步就是快的等慢的,然后一起往前走,表示的是目的。
所谓阻塞就是想办法让快的停滞不前,等待慢的到来,表示的是手段。
一言以蔽之,同步是目的,阻塞是手段。