美文网首页
异步I/O笔记

异步I/O笔记

作者: SeanKChan | 来源:发表于2015-12-18 14:29 被阅读0次

    1.为什么要异步I/O

    Node既可以作为服务器端去处理客户端带来的大量并发请求,也能作为客户端对网络中的各个应用进行并发请求。--

    在B/S模型中,如果网页临时需要获取一个网络资源,通过异步的方式获取服务端的资源,在下载资源的期间,用户交互都不会处于等待状态。但是前端获取资源的速度也取决于后端的响应速度。随着WebApp不断膨胀,数据也会分布式到多台服务器上,分布式将会是常态,这也会放大异步和同步性能上的差异。

    不同的I/O类型及其对应的开销

    I/O类型 花费的CPU时钟周期
    cpu一级缓存 3
    cpu二级缓存 14
    内存 250
    硬盘 41000000
    网络 240000000

    I/O是昂贵的,分布式I/O是更昂贵的。只有后端能够快速的响应资源,才能让前段的体验更好。

    2.资源分配

    通常计算机在运行的过程对组件进行了抽象,分为I/O设备和计算设备。
    多线程的代价在于创建线程和执行线程上下文切换的开销较大。另外,在复杂的业务中,多线程编程经常面临锁、状态同步等问题,优势是在多核CPU上能够有效提升CPU的利用率。
    单线程同步编程缺点在于性能,任意一个略慢的任务都会导致后续执行代码被阻塞,在计算机资源中,通常I/O与CPU计算之间是可以并行进行的,但是同步编程会让后续任务等待,造成资源不能更好地利用。
    异步I/O就是期望I/O的调用不会阻塞后续运算,将原有等待I/O的这段时间分配给其余的业务去执行。

    3.异步I/O实现

    操作系统对计算机进行了抽象,将所有输入输出设备抽象为文件。内核在进行文件I/O操作时,通过文件描述符进行管理,而文件描述符类似于应用程序和系统内核之间的凭证。应用程序如果需要进行I/O调用,需要先打开文件描述符,然后再根据文件描述符去实现文件的读写。此处非阻塞I/O与阻塞I/O的区别在于阻塞I/O完成整个获取数据的过程,而非阻塞I/O则不带数据直接返回,要获取数据,还需要通过文件描述符再次获取。
    非阻塞I/O返回之后,CPU的时间片可以处理其他事务,由于完整的I/O并没有完成,应用程序需要重复调用I/O操作来确认是否完成。这种重复调用操作判断是否完成的技术叫轮询

    相关文章

      网友评论

          本文标题:异步I/O笔记

          本文链接:https://www.haomeiwen.com/subject/oqyphttx.html