前端精髓

每日为你推送

假设业务场景中有一组互不相关的任务需要完成,现行的主流方法有以下两种。

单线程串行依次执行。

多线程并行完成。

如果创建多线程的开销小于并行执行,那么多线程的方式是首选的。多线程的代价在于创建线程和执行期线程上下文切换的开销较大。另外,在复杂的业务中,多线程编程经常面临锁、状态同步等问题,这是多线程被诟病的主要原因。但是多线程在多核CPU上能够有效提升CPU的利用率,这个优势是毋庸置疑的。

单线程顺序执行任务的方式比较符合编程人员按顺序思考的思维方式。它依然是最主流的编程方式,因为它易于表达。但是串行执行的缺点在于性能,任意一个略慢的任务都会导致后续执行代码被阻塞。在计算机资源中,通常I/O与CPU计算之间是可以并行进行的。但是同步的编程模型导致的问题是,I/O的进行会让后续任务等待,这造成资源不能被更好地利用。

操作系统会将CPU的时间片分配给其余进程,以公平而有效地利用资源,基于这一点,有的服务器为了提升响应能力,会通过启动多个工作进程来为更多的用户服务。但是对于这一组任务而言,它无法分发任务到多个进程上,所以依然无法高效利用资源,结束所有任务所需的时间将会较长。这种模式类似于加三倍服务器,达到占用更多资源来提升服务速度,它并没能真正改善问题。

添加硬件资源是一种提升服务质量的方式,但它不是唯一的方式。

单线程同步编程模型会因阻塞I/O导致硬件资源得不到更优的使用。多线程编程模型也因为编程中的死锁、状态同步等问题让开发人员头疼。

Node在两者之间给出了它的方案:利用单线程,远离多线程死锁、状态同步等问题;利用异步I/O,让单线程远离阻塞,以更好地使用CPU。

异步I/O可以算作Node的特色,因为它是首个大规模将异步I/O应用在应用层上的平台,它力求在单线程上将资源分配得更高效。

为了弥补单线程无法利用多核CPU的缺点,Node提供了类似前端浏览器中Web Workers的子进程,该子进程可以通过工作进程高效地利用CPU和I/O。

异步I/O的提出是期望I/O的调用不再阻塞后续运算,将原有等待I/O完成的这段时间分配给其余需要的业务去执行。

单线程和多线程的区别相关推荐

  1. 单线程与多线程的区别

    程序是什么? ​ 程序是由源代码生成的可执行应用. 什么是进程? ​ 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什 ...

  2. java单线程和多线程的区别

    1.单线程和多线程的区别? 你早上上班,正要打卡的时候,手机响了..你如果先接了电话,等接完了,在打卡,就是单线程. 如果你一手接电话,一手打卡.就是多线程. 这两件事的结果是一样的..你接了电话且打 ...

  3. 单线程、多线程的区别

    程序.进程.线程 程序:由源代码生成的可执行应用. (例如:QQ.app) 进程:一个正在运行的程序可以看做一个进程,(例如:正在运行的QQ警示一个劲曾),进程拥有独立运行所需要的全部资源 线程:程序 ...

  4. 理解单线程和多线程的区别

    单线程和多线程 首先我们都知道线程是隶属于进程的,单线程就是程序中只有一个线程,多线程就是程序中有多个线程.通过连个例子理解多线程和单线程. (一)单线程 创建包:package com.ffyc.j ...

  5. python单线程和多线程的区别

    多线程与单线程的区别 1.生活举例 你早上上班,正要打卡的时候,手机响了..你如果先接了电话,等接完了,在打卡,就是单线程. 如果你一手接电话,一手打卡.就是多线程,2件事的结果是一样的..你接了电话 ...

  6. 什么是单线程和多线程,单线程与多线程的区别

    什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的 ...

  7. 单线程和多线程的区别_谷歌下载东西超慢?开启Chrome多线程下载,下载速度提升10倍+...

    用谷歌浏览器下载速度慢,浏览器采用的是单线程下载,"一人难敌四手"的浏览器自然斗不过多线程了.所以说浏览器想要提高下载速度,就得采用多线程的下载方式,不过到目前为止,Chrome多 ...

  8. Redis 属于单线程还是多线程?不同的版本有什么区别?

    Redis 是普及率最高的技术之一,同时也是面试中必问的一个技术模块,所以从今天开始我们将从最热门的 Redis 面试题入手,更加深入的学习和了解一下 Redis. 我们本文的面试题是 Redis 属 ...

  9. 多线程不能不知道的之单线程和多线程的比较

    早期的计算硬件十分复杂,但是操作系统执行的功能确十分的简单.那个时候的操作系统在任一时间点只能执行一个任务,也就是同一时间只能执行一个程序.多个任务的执行必须得轮流执行,在系统里面进行排队等候. 栗子 ...

最新文章

  1. 召唤超参调优开源新神器:集XGBoost、TensorFlow、PyTorch、MXNet等十大模块于一身...
  2. java 字符串写入word,JAVA 将字符串hollow 替换成word肿么实现?
  3. Spring Security基于角色的权限管理
  4. Android反编译 -- 错误代码还原
  5. 吐血整理!内部包含3980大数据、机器学习、推荐系统实战课程,仅分享一次
  6. linux之grep使用技巧
  7. python求解括号匹配的相关问题
  8. Linux上安装rz、sz命令
  9. 关于win7系统重装完鼠标不能用的解决办法
  10. 任务栏图标消失怎么办?三种方法教你快速恢复
  11. Comparative Evaluation of Genome Assemblers from Long-Read Sequencing for Plants and Crops
  12. Dockerfile中ADD文件用法
  13. camtasia 2022标准版录制电脑屏幕视频教程
  14. Android马甲包
  15. 使用阿里云服务器搭建个人博客
  16. simulink电机仿真学习 - SVPWM原理分析及仿真分析
  17. 南华大学计算机学院王玉锋,喜报!南华大学和王玉锋同学双双获奖!
  18. dnet: Failed to open device lo0
  19. win7旗舰版 Internet协议版本4的设置方法 --转载
  20. Delphi 常用函数

热门文章

  1. “好师父”如何破解大学生就业难题
  2. 免费直播:1 小时带你体验 Python 车牌识别实战
  3. 一文浓缩 60 年,程序员不可不知的开源秘史!
  4. 漫画:跑上百万次代码验证三门问题
  5. “我们完全误解了区块链!”
  6. Kotlin 风险高、RxJava 已过时,Android 原生开发现状分析!
  7. 罗永浩向老同事道歉;三星漏洞已波及四千万用户;Clojure 1.11 即将发布 | 极客头条...
  8. 任正非称华为 6G 领先世界;支付宝小程序将与微博打通;Linux Kernel 5.3 发布 | 极客头条...
  9. 如何攻克 C++ 中复杂的类型转换?
  10. 谷歌再现大规模宕机!