理解 Javascript 的单线程,着实不易

       理解 Javascript 的单线程,着实不易。

       比如,对于 C 系编程来说,写个 while(true) 不是什么令人紧张的事情。在 nodejs 中似乎也不会出什么意外,因为还有消息机制可以操控——这只是你对 nodejs 的幻觉,或者说,这只是我对 nodejs 的幻觉。若子进程写成这样的话:

process.on('message', function() {
  while(true);
});

process.on('SIGINT', function() {
  console.log('Child Process killed by SIGINT Signal .');
  process.exit();
});

process.on('SIGTERM', function() {
  console.log('Child Process killed by SIGTERM Signal .');
  process.exit();
});

       当主进程发出 kill 时会发生什么?在我的 MAC 上,子进程失控,CPU 跑满,风扇狂转。

       因为在 nodejs 中,一个 while(true) 让 eventloop 直接卡死了。

       对于 Javascript 来说,应用 setInterval 的。记得之前是有人提醒过我,要会用 setInterval,从坑里爬出来才深刻体会到,是该会用的。

       所以说,在 Javascript 中,应该禁用 while 做轮循或等待。

--------------------------------

       在 nodejs 中,“线程”的概念就这么几种实现,process.nextTick、setTimeout、setImmediate、setInterval,异步编程也靠这些。但它们都不是真正的“线程”,比如做不到 sleep(),做不到精准定时,总归,其实仍然是一根线程,进程下的就这么一根线程。如果有需要掐时间调度的工作,或者比较重型的耗时工作,还是得开子进程来得差不多。

--------------------------------

       在 nodejs 中似乎不会存在“临界区”这么个概念以及其带来的问题。因为丫根本就不允许进程间共享资源。公有数据只能写在第三方服务里。静态配置还好说,写在一个模块中就完了。动态配置和动态信息的话……最简单的就是……读写文件……如果不频繁的话倒不是什么问题。频繁的话,就得上重型装备,比如 redis ……

--------------------------------

       拿 Javascript 做到现在,算是慢慢体会到这门语言应有的思维,或者说,语言,其在图灵机中的运行策略。当我面试别人问及语言时,真正会用者,所言及之事,不是说它都做什么,而是,它有什么什么,不能。知其不可者,才是经验。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值