码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-02-07 11:47:19      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:node   web   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 做到现在,算是慢慢体会到这门语言应有的思维,或者说,语言,其在图灵机中的运行策略。当我面试别人问及语言时,真正会用者,所言及之事,不是说它都做什么,而是,它有什么什么,不能。知其不可者,才是经验。

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

标签:node   web   javascript   

原文地址:http://blog.csdn.net/hikaliv/article/details/43565309

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!