• 一直令我纠结的问题,关于“线程”与“阻塞”


    这个问题有可能是我个人的疑惑,或许其他人一看就明白,人总有转不过弯的时候!

    NodeJS是单线程的异步操作,在书上讲这一点的时候往往会拿出常规的做法来与之对比:单线程的阻塞操作。

    书中写道:

    线程在执行中如果遇到磁盘读写或网络通信(统称为 I/O 操作),
    通常要耗费较长的时间,这时操作系统会剥夺这个线程的 CPU 控制权,使其暂停执行,同
    时将资源让给其他的工作线程,这种线程调度方式称为 阻塞。当 I/O 操作完毕时,操作系统
    将这个线程的阻塞状态解除,恢复其对CPU 的控制权,令其继续执行。

    比如单线程中遇到一个读取txt文件的操作,按照上面的说法,此时该线程的CPU控制权被剥夺了。当这个操作完成后该线程再重新拥有CPU控制权。

    我大感不解:既然失去了CPU,那这个对txt的处理是谁做的呢,难道还有另外一个CPU不成? 

    我一直认为计算机上所有执行的操作全都是CPU来完成,其实不然。就拿读取硬盘上的某txt文件来说,CPU发出读取txt指令,但具体的读取操作并

    不是CPU去做的,而是硬盘去做的。CPU只是负责把指令送到数据总线,是其它设备接到命令并按照CPU的要求去处理数据,然后再把数据送来到

    总线接口处。此时通知CPU,CPU才会再次接手工作对数据进行下一步操作。

    我对这个解释还是比较满意的,如果有问题希望大家多多指出。

  • 相关阅读:
    大道至简第一张读后感
    字符串加密
    写一个类,在任何时候都可以向它查询创建了多少个类
    类与对象动手动脑
    2016年读书清单
    2016-09-01
    Spring笔记(五)--注解方式实现AOP
    Spring笔记(三)--代理模式
    Spring笔记(四)--公共属性的配置
    表达式之谜
  • 原文地址:https://www.cnblogs.com/zhangran/p/2990735.html
Copyright © 2020-2023  润新知