`
pcajax
  • 浏览: 2182168 次
  • 性别: 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才会再次接手工作对数据进行下一步操作。

 

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

分享到:
评论

相关推荐

    深入Hotspot源码与Linux内核理解NIO与Netty线程模型.pdf

    总的来说,深入理解Hotspot源码和Linux内核对于掌握NIO与Netty线程模型是必不可少的。这不仅能够帮助开发者编写出更加高效的网络应用程序,也能够更好地处理复杂的网络编程问题,提高系统的稳定性和性能。

    socket 多线程 例程 非阻塞模式

    在这个"socket多线程例程非阻塞模式"的示例中,我们将深入探讨如何在Windows平台上实现多线程的socket通信,并了解非阻塞模式的工作原理。 首先,让我们来理解Socket的基本概念。Socket是进程间通信(IPC)的一种...

    C++封装类CWSocket(多线程 非阻塞)

    通过阅读和分析这些代码,我们可以深入了解如何在C++中实现多线程、非阻塞的socket类,以及如何添加超时控制。 总的来说,C++封装类CWSocket的实现结合了多线程、非阻塞I/O和超时处理等关键技术,旨在提供一个高效...

    Java Socket学习---单线程阻塞

    但是,对于初学者来说,理解单线程阻塞模型是学习网络编程的基础,有助于深入理解Socket通信的工作原理。 此外,源码分析可以帮助我们更好地理解Socket通信的细节,例如异常处理、连接超时、资源管理等。通过阅读和...

    java深入理解多线程

    以下是对Java多线程的深入理解: 线程概述 基本概念:线程是操作系统能够进行运算调度的最小单位,一个进程可以包含多个线程。 特性:线程不拥有系统资源,只拥有一点必不可少的、能保证独立运行的资源。同一进程...

    多线程列子多线程列子多线程列子

    本文将深入探讨多线程的相关知识点,包括其定义、作用、优缺点以及如何在实际编程中实现多线程。 一、多线程定义 多线程是指在一个进程中可以同时存在多个执行线程。每个线程都是程序的一个单一顺序控制流,可以...

    单线程与多线程的区别

    通过分析和运行这些示例,你可以深入学习到如何在多线程环境中实现任务调度、同步和通信,以及如何优化多线程程序的性能。记住,实践是检验理论的最好方式,所以动手尝试这些示例将对你的编程技能大有裨益。

    深入多线程编程

    深入多线程编程:关键技术与实战应用 在现代软件开发中,多线程编程已成为提升应用程序性能、响应...通过深入理解这些概念和实践,开发者可以更好地掌握多线程编程的精髓,构建出高效、稳定和可扩展的多线程应用程序。

    Swing线程的深入理解和SwingWorker基础知识介绍

    Swing线程的深入理解和SwingWorker基础知识介绍 Swing线程是Java程序设计中的一种重要概念,用于处理图形用户界面(GUI)中的线程问题。在本文中,我们将深入探讨Swing线程的理解和SwingWorker基础知识,并通过实例...

    深入了解java多线程

    深入了解Java多线程:核心概念与实践 Java作为一门广泛使用的编程语言,其对多线程的支持是其强大功能之一。多线程允许程序在单个进程中并发执行多个任务,从而提高了程序的效率和响应性。本文将深入探讨Java多线程...

    python多线程非阻塞socket

    本文将深入探讨如何在Python中实现多线程非阻塞的Socket服务端和客户端,以提升并发处理能力。 首先,让我们理解“多线程”和“非阻塞”的概念。多线程是指在一个进程中同时执行多个线程,每个线程独立完成特定任务...

    易语言线程暂停与继续

    这份源码可能包含了创建线程、挂起线程、恢复线程、销毁线程的实际示例,对于深入理解易语言的线程控制机制非常有帮助。通过阅读和分析源代码,可以掌握如何在实际项目中应用这些技术,提升编程技能。

    从0开始深入理解并发、线程与等待通知机制

    ### 从0开始深入理解并发、线程与等待通知机制 #### 为什么学习并发编程? 在当前互联网技术的发展背景下,特别是在Java开发领域中,具备良好的并发编程能力已成为求职者的重要竞争力之一。无论是在大型互联网公司...

    Linux下多线程的阻塞模式下的socket编程

    在实际应用中,多线程阻塞模式的socket编程需要注意线程安全问题,比如避免多个线程同时访问同一资源,可能需要使用互斥锁(mutex)等同步机制。此外,合理的错误处理和异常控制也是保证程序健壮性的重要环节。 ...

    MFC用户界面线程与工作者线程

    本主题将深入探讨MFC中用户界面线程(UI Thread)与工作者线程(Worker Thread)的概念及其应用,这对于理解多线程编程至关重要。 用户界面线程,也称为主线程,是应用程序启动时自动创建的线程。它负责处理窗口...

    多线程之间的线程通信

    在本话题中,我们将深入探讨线程通信的原理、方法,以及潜在的危险。 首先,线程通信是指在一个进程中,不同的线程之间共享数据和协调执行顺序的过程。这种通信通常涉及两个主要方面:同步和互斥。同步是为了保证...

    Java线程创建与管理:深入理解与实践指南

    ### Java线程创建与管理:深入理解与实践指南 #### 引言 多线程作为Java程序设计中的重要概念之一,使开发者能够构建并行执行的任务,进而提高程序的效率和响应速度。Java语言提供了丰富的工具和技术来支持线程的...

    普通的SOCKET多线程阻塞模型

    总之,"普通的SOCKET多线程阻塞模型"是一种基础的网络编程模型,它在理解和实践上相对简单,但面对高并发需求时,可能需要优化或转换为更高效的设计模式。在实际项目中,开发者应根据具体需求和系统资源选择合适的...

    java 同步阻塞并唤醒指定线程

    总的来说,理解并熟练掌握Java中的多线程同步和阻塞机制对于编写高效且线程安全的代码至关重要。通过合理使用`synchronized`、`wait()`, `notify()`和`notifyAll()`,以及高级并发工具,开发者可以构建出复杂且可靠...

    深入浅出Java多线程.pdf

    综上所述,《深入浅出Java多线程.pdf》覆盖了Java多线程从基础知识到高级特性的各个方面,适合于想要深入理解Java多线程机制的开发人员阅读。无论是初学者还是有一定经验的开发者,都能从中获得宝贵的理论知识和实践...

Global site tag (gtag.js) - Google Analytics