进程&线程&并发
发布日期:2021-05-07 07:21:58 浏览次数:14 分类:精选文章

本文共 1352 字,大约阅读时间需要 4 分钟。

什么是线程

线程是操作系统中执行程序的基本单元,是进程中由一个独立的控制流执行的单元。与进程相比,线程具有更细粒度的执行单位,同类线程共享进程的内存空间和系统资源。每个线程都有自己的堆栈,但它们共享同一个地址空间和其他系统资源。线程的使用可以显著提高程序的执行效率,因为线程切换的开销非常小。

进程与线程的区别

一个进程至少包含一个线程,而一个线程则是进程中执行任务的基本单元。线程比进程具有更细粒度的执行单位,这使得多线程程序能够在更短的时间内完成任务。与进程相比,线程的资源共享更加细致,进程和线程的主要区别在于资源管理的层次:

  • 资源分配:进程拥有独立的内存空间,而线程共享进程的内存空间。
  • 调度机制:线程的调度更加灵活,适合处理I/O密集型任务。
  • 并发程度:线程比进程具有更高的并发能力,适合处理复杂的并发需求。

从逻辑角度看,线程允许一个应用程序在多个执行单元同时运行,从而提高系统的吞吐量和效率。但需要注意的是,操作系统并不会将线程视为独立的进程来调度和管理,它们都属于同一个进程。

并发原理

在操作系统中,进程和线程的并发运行并不是真的“同时”执行。实际上,CPU通过时间片轮转的方式,决定哪个线程或进程能获得执行权限。操作系统会将时间划分为许多小的时间片,轮流分配给各个线程或进程。这样做的目的在于让系统能够更高效地利用CPU资源,同时避免某个进程或线程长时间占用CPU,影响系统性能。

从微观角度看,所有进程和线程都是在不断地切换运行状态。虽然宏观上它们都在运行,但实际上它们是轮流获取CPU时间片的。这种轮流运行的机制就是并发的本质。虽然并发程序看起来像是多个任务同时运行,但实际上它们是以一种交替的方式运行的。

线程的状态

线程在其生命周期中会经历多个状态。这些状态反映了线程与操作系统交互的方式。以下是线程可能经历的主要状态:

  • 初始状态(New State)

    • 新建的线程在被创建时处于初始状态。它尚未开始执行,尚未调用start()方法。
  • 等待状态(Waiting State)

    • 线程在调用start()方法之前,或者在等待某个事件(如I/O操作完成)之前,处于等待状态。
  • 就绪状态(Runnable State)

    • 线程处于就绪状态时,表示它已经准备好等待CPU的使用权。这时它位于Java虚拟机的可运行池中,等待获得CPU时间片。
  • 运行状态(Running State)

    • 当线程获得CPU时间片时,它从就绪状态转入运行状态。此时,线程占用CPU,执行程序的代码。
  • 阻塞状态(Blocked State)

    • 线程在某些情况下会因等待资源(如I/O设备或锁)而进入阻塞状态。在这种情况下,线程不会占用CPU,它会暂时停止执行,直到资源变得可用。

    • 等待阻塞:线程调用wait()方法时进入等待阻塞状态。

    • 同步阻塞:线程在尝试获取对象同步锁时,由于锁已经被占用,进入同步阻塞状态。

    • 其他阻塞:线程调用sleep()方法或等待I/O操作完成时,进入其他阻塞状态。

  • 死亡状态(Dead State)

    • 当线程执行完毕(包括正常退出或被中断)时,它会进入死亡状态,并终止其生命周期。
  • 线程的状态转换是由操作系统和Java虚拟机的调度机制决定的。理解这些状态有助于更好地分析线程程序的行为和性能问题。

    上一篇:js中[]、{}、()的区别
    下一篇:Vue快速入门学习笔记(更新ing)

    发表评论

    最新留言

    初次前来,多多关照!
    [***.217.46.12]2025年03月16日 14时36分22秒