周总结-线程和进程

hi 这里是胡斌的上周工作总结

Node中线程和异步的理解

一些理解

  • 我们写出来的js代码,是在单线程的环境中执行,但nodejs本身不是单线程的。如果我们在代码中执行了一个promise,它们可能是通过底层的c++模块在另外的线程中完成?... 但对于我们自己的js代码来说,它们处于单线程中。因为异步函数执行完将结果通过回调函数传给我们的时候,我们的代码一次只能处理一个。

  • node擅长处理高并发,是因为拥有异步IO,node在处理IO时主线程会创建N个子线程以提高速度,虽然开启了多个线程,但是所有线程都是基于主线程开启的只能跑在一个进程当中并不能充分利用cpu资源

单线程的问题

var start = Date.now();//获取当前时间戳
setTimeout(function () {
    console.log(Date.now() - start);
    for (var i = 0; i < 10000000000; i++){//执行长循环
    }
}, 1000);
setTimeout(function () {
    console.log(Date.now() - start);
}, 2000);

上面执行后的输出结果为1000、13322,足足等了10秒钟,console.log才被执行,这个for循环是一个非常吃CPU的计算过程,而Node的主线程却只能调用一个CPU来计算它(线程是cpu调度的一个基本单位,一个cpu同时只能执行一个线程的任务),但是如果我们在写JS代码时能像Node底层开启另外一个线程处理异步的方式那样,手动创建子线程,这个问题就解决了。

cluster和多线程模型

  • cluster是Node内置的用于启动多个子进程的模块,可以用来让Node.js充分利用多核cpu的性能。
  • 而另外一个TAGG模块可以让Node支持多线程模型从而启动多个子线程。

关于这两个模块对于进程和线程的操作原理以及区别还没有学习到位,下次总结这个吧。

使用单线程的Node写代码时应该注意的东西

  • 上面的测试说明了,在主线程做一些CPU计算量很大的任务可能会导致主线程卡住或者长时间停顿从而让整个程序的执行延时甚至卡死,影响程序性能,所以我们要非常小心的处理大量的循环,字符串拼接和浮点运算这种cpu密集型任务,在需要的时候应该利用上面提到的cluster和多线程模型把任务丢给子线程或子进程去完成,保持程序主线程的畅通。

然而我现在还没有真正使用过多线程模型进行编程过,上面的都是总结的理论知识,下次使用过后再好好总结这方面的知识。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # 模块机制 node采用模块化结构,按照CommonJS规范定义和使用模块,模块与文件是一一对应关系,即加载一个...
    RichRand阅读 7,366评论 0 3
  • 小阿喵啊阅读 1,661评论 0 8
  • 说出来你可能不信,我从没经历过任何形式的一见钟情,却遭遇了几乎每一段恋情的瞬间破灭,这种时刻的发生,就像刚刚听老师...
    海边的疯帽子阅读 2,615评论 0 0
  • 从梦中醒来,觉得一点都不真实。居然梦见她怀孕了,还是和那个男生的,颠覆了我的三观。我在梦中哭的声嘶力竭,后悔不已,...
    96line_9阅读 1,202评论 0 0
  • 孩声声声响 四世聚同堂 ...
    柒影阅读 2,778评论 0 1

友情链接更多精彩内容