mac上运行nodejs程序 阻塞

JavaScript011

mac上运行nodejs程序 阻塞,第1张

1.publish将数据写入到一个listorsortedlist队列,写完成后开始给终端广播消息,告诉大家,有新的数据等待处理,这个时候,谁能pop到数据,就是谁处理,这个操作是原子性的,也就是说不会被重复处理.2.使用阻塞模式,redis提供了blpopbrpop这种操作,也就是一直阻塞一个队列,直到有数据来.这种模式保证了数据的原子性,而且使应用程序可以支持分布式多台机器部署.

首先你得明白阻塞指的是什么,   nodejs里面的阻塞指的的I/O阻塞, 比如 文件读写, 网络流量等,    在你的观念里面,以为什么都可以阻塞是错误的, js的for循环中如果进行的是IO操作,那么,它也是非阻塞的。 基本在所有的程序语言里面,计算型的操作都是阻塞的,cpu 需要持续不断的工作才能完成 数据计算。

举个简单的例子来说明for的阻塞和非阻塞情况。(这里用setTimeout 来模拟

操作)

#阻塞型

for(var i = 0 i < 10i++  ){console.log(i)}

输出: 1,2,3 ...10

#非阻塞型

for(var i = 0  i < 10i++){

 setTimeout(function(){

     console.log(i)

 }, 10-i)

}

输出: 10, 9, ...0 #在实际中可能是这样的顺序,也可能不是的,因为无法预估 IO完成的实际时间。