前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >异步IO(一)

异步IO(一)

作者头像
RobinsonZhang
发布2018-10-08 11:11:02
7600
发布2018-10-08 11:11:02
举报

前言

在web2.0的时候,其实前端就很熟悉异步编程了,只不过那时大家使用的是ajax(典型的网络请求)实现的,还有一些前端的事件机制(针对事件定义回调事件)。

但是在传统的高级编程中,异步编程很少被使用,因为大部分程序员不习惯异步编程来进行程序设计。而node是首个将异步作为主要编程方式和设计理念的编程语言。

与node事件驱动、异步io设计理念相近的是nginx,它具备向客户端管理连接的巨大能力,但是其底层还是受制于各种同步的编程方式。而node是全方面的,既可以作为服务端去处理客户端带来的大量并发请求,也能作为客户端去向网络中的各个应用进行并发请求。

为什么要异步

用户体验

最早的浏览器中js是单线程的,获取一个网络资源需要同步获取,如果有两个请求,时间消耗分别为M,N,那么同步请求的时间则为两者之和;而如果是异步,则是取较大者;另外一个明显的区别就是同步会阻塞ui渲染,而异步不会。

在大时代背景下,越来越多的微服务是分布的,而随着服务的增多这部分开销会线型增长,也意味着放大同步和异步的性能差异。在下面的表格中,我们列举了一些从cpu缓存到网络的数据访问所需要的开销作为对比。

io类型

花费时间周期

cpu一级缓存

3

cpu二级缓存

14

内存

250

硬盘

41000000

网络

240000000

资源分配

场景:如果有若干不相干的任务需要完成,主要有两种方式: 1 单线程顺序执行 2 多线程并发完成

分析:针对两种的优缺点进行简要分析

实现方式

优点

缺点

其他

单线程顺序执行

符合编程思维

性能不好,任何一个任务慢会导致其他阻塞,在计算机中,io和cpu计算可以并行进行的,但同步编程中的io会让其他任务阻塞

多线程并发

更好的利用cpu

面临锁、状态同步的问题

前提是创建线程的开销远小于并行任务

为了弥补单线程无法利用多核cpu的缺点,node提供了类似web worker的子进程,子进程通过工作进程高效的利用cpu和io.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 为什么要异步
    • 用户体验
      • 资源分配
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档