`
pcajax
  • 浏览: 2113064 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

深入理解线程与阻塞

 
阅读更多

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

 

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

书中写道:

 

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

 

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

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

 

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

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

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

 

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

分享到:
评论

相关推荐

    深入理解Java线程编程中的阻塞队列容器

    阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。 阻塞队列提供了四种处理方法: 抛出异常...

    java并发编程:线程基础

    通过深入学习,您将建立扎实的多线程编程基础,能够更好地理解和应用多线程编程。 多线程概述: 简要介绍多线程编程的重要性和应用场景。解释为什么多线程可以提高程序性能和资源利用率。 线程的创建: 详细讲解线程...

    深入理解Netty线程模型

    从这篇文章中,大家可以学习到如下知识:什么是I/O多路复用Reactor三种线程模型Netty线程模型NioEventLoop源码分析JDKepollbug学习I/O多路复用之前,我们先来了解如下几个概念:阻塞I/O:客户端从socket中读取数据或...

    深入了解c#多线程编程

    1、进程与线程:进程作为操作系统执行程序的基本单位,拥有应用程序的资源,进程包含线程,进程的资源被线程共享,线程不拥有资源。 2、前台线程和后台线程:通过Thread类新建线程默认为前台线程。当所有前台线程...

    linux系统编程之线程.zip

    attr参数表示线程属性,本节不深入讨论线程属性,所有代码例子都传NULL给attr参数,表示线程属性取缺省值,感兴趣的读者可以参考APUE。 【练习】:创建一个新线程,打印线程ID。注意:链接线程库 -lpthread ...

    阻塞与非阻塞

    通过此次演示程序的制作,对于TCP的三路握手、Socket的运用理解更加深入了,同时从文字上的阻塞与非阻塞到情真意切的感受到二者之间的差异,闲暇之余,发现一本好书,书名好像叫“WIn32多线程”,书中用例与讲解很...

    JavaScript是否可实现多线程 深入理解JavaScript定时机制

    容易欺骗别人感情的JavaScript定时器 JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 代码如下: setTimeout( ...

    一分钟用睡前小故事图解Java线程之死锁

    为了更好的理解死锁,读者可能需要了解线程安全相关的知识,主要是对线程执行的六大状态有一定的了解,尤其是阻塞状态,这是死锁发生的关键。进而才能对死锁的过程深入理解。这里附上一篇读前分享链接,当然,你也...

    深入理解Java源码:提升技术功底,深度掌握技术框架,快速定位线上问题

    先使用框架,然后找一个demo入手,顺藤摸瓜快速静态看一遍框架的主线源码,画出源码主流程图,然后总结框架的一些核心功能点,从这些功能点入手深入到源码的细节,边看源码边画源码走向图,并对关键源码的理解做笔记...

    深入理解 Event Loop事件循环机制

    Event Loop事件循环机制 事件循环机制(Event Loop)是全面了解javascript代码执行顺序绕不开的一个重要知识点。 为什么会有事件循环机制? javascript从诞生之日...这里面还可深入了解js引擎线程、ui渲染线程、http请

    理解原子操作,CAS加锁是线程安全的.docx

    性能的改善得益于 偏向锁、轻量级锁 的引入,它们具体的实现方式可参考《Java并发编程的艺术》和《深入理解Java虚拟机》这两本书。偏向锁、轻量级锁和重量级锁不同的地方在于不是通过信号量机制(强制阻塞)而是...

    c#.net多线程编程教学——线程同步

    随着对多线程学习的深入,你可能觉得需要了解一些有关线程共享资源的问题. .NET framework提供了很多的类和数据类型来控制对共享资源的访问。 考虑一种我们经常遇到的情况:有一些全局变量和共享的类变量,我们需要...

    深入学习python中的并发(一)---线程

    python也提供了线程相关的并发原语,如锁threading.Lock,事件threading.Event,条件变量threading...我们先通过2个具体的例子来分析和理解python中的多线程编程。 1.实现2个线程交替打印奇偶数 2.实现一个支持并发使用

    Java并发编程原理与实战

    深入理解volatile原理与使用.mp4 JDK5提供的原子类的操作以及实现原理.mp4 Lock接口认识与使用.mp4 手动实现一个可重入锁.mp4 AbstractQueuedSynchronizer(AQS)详解.mp4 使用AQS重写自己的锁.mp4 重入锁原理与演示....

    深入理解Java中的AQS.docx

    AQS是一个通过内置的 FIFO 双向队列来完成线程的排队工作(内部通过结点head和tail记录队首和队尾元素,元素的结点类型为Node类型,后面我们会看到Node的具体构造)。 /*等待队列的队首结点(懒加载,这里体现为竞争...

    FFmpeg线程类封装,并在Qt中完整调用(包括编译好的FFmpeg动态和静态链接库、头文件)

    使用该代码工程,用户可以快速地在自己的Qt项目中集成直播拉流功能,而无需深入了解FFmpeg库的底层实现细节。这对于需要在Qt应用中添加直播功能的开发者来说,是一个非常方便和高效的资源。 总之,本代码工程为Qt...

    完结13章一课掌握Java并发编程精髓

    Java并发编程从入门到进阶 多场景实战,众所周知,并发编程是优秀工程师的标准之一,但知识庞杂,复杂性高,常常让人望而却步。但如果没有掌握背后的核心原理,你开发的代码可能...3. 阻塞(BLOCKED):表示线程阻塞于锁

    JavaScript可否多线程? 深入理解JavaScript定时机制

    例如 代码如下: setTimeout( function(){ alert(‘你好!’); } , 0); setInterval( callbackFunction , 100); 认为setTimeout中的问候方法会立即被执行,因为这并不是凭空而说,而是JavaScript API文档明确...

Global site tag (gtag.js) - Google Analytics