【Java多线程:线程引入】

导读

本文介绍多线程的概念。
围绕 CPU、操作系统、进程、并发这些概念,引入线程的概念。

本文内容可参考《计算机组成原理》和《操作系统概述》这两本书籍,笔者在此做一总结。


CPU

**CPU(Central Processing Unit,中央处理器)**是计算机的核心部件,负责执行指令、进行计算和控制系统的运行。
计算机的大脑,决定计算机的性能。

这里仅以抽象的视角谈一下 CPU,不涉及门电路、物理原理、晶体管集成电路等。

CPU 的组成

典型 CPU 由三个主要部分组成:ALU、CU、Register。

  1. ALU(算术逻辑单元,Algorithm Logic Unit):执行算术运算( + , − , × , ÷ +,-,\times ,\div +,,×,÷)和逻辑运算(与、或、非、异或)。
  2. CU(控制单元,Control Unit):解析指令,控制 ALU 以及 CPU 内部其他部件的工作。
  3. Register(寄存器):可视作 CPU 内部的"内存",是一种高速缓存存储器,用于临时存储数据和指令。
    • 指令寄存器:存储当前执行的指令。
    • 程序寄存器:存储下一条指令的地址。
    • 数据寄存器:存储临时操作的数据。

CPU 工作原理

CPU 的核心任务是执行指令。指令即 CPU 工作的命令,是一串二进制码(机器码)。

指令:告诉 CPU 如何操作以及操作的数据。
程序 = 指令 + 指令操作的数据。

以 C 语言程序为例:

  1. 程序存储

    • C 语言编写的程序是一个文本文件,存储在外存(硬盘)中。
  2. 程序转换(高级语言 -> 汇编 -> 机器码)

    • 计算机无法直接执行文本文件,为了运行 C 程序,首先要生成它对应的二进制文件。
    • 预编译 -> 编译 -> 汇编 -> 链接,最终生成 CPU 可执行的机器码。
    • 这些步骤由编译器(GCC、Clang)和汇编器完成。
  3. 程序加载(硬盘 -> 内存 -> CPU)

    • 生成的二进制文件仍存储在硬盘中,运行程序时必须加载到内存。
    • CPU 通过总线与内存交互,执行一条条指令。
    • 这一步由**操作系统(OS)**执行。

总结

  1. CPU 无法直接与硬盘交互。
  2. CPU 通过总线与内存通信。
  3. 计算结果保存在寄存器、内存、缓存中。

操作系统

如果说 CPU 是真正干活的人,那么操作系统就是协调的管理员。

操作系统(OS)是管理系统硬件与软件资源的系统软件。

操作系统协调 CPU、存储器(外存与内存)、输入输出设备等资源,确保多个程序高效运行。

操作系统的类型

操作系统用途
Windows办公、娱乐
Linux服务器、云计算
macOSApple 专用
Android移动端、嵌入式
iOSApple 移动端设备(iPhone、iPad)
Unix高性能

进程

进程的概念

程序是静态的,存储在硬盘上的二进制代码。CPU 运行时,它才会变成动态实例。

进程(Process)是程序执行的实体,包含指令、数据、分配的硬件资源。它是操作系统分配资源(CPU 时间、内存等)的基本单元。

每个进程都有独立的地址空间,并包含以下关键部分:

  1. 程序代码(Code Segment):存放可执行代码。
  2. 数据段(Data Segment):存储全局变量和静态变量。
  3. 堆(Heap):用于动态分配的内存。
  4. 栈(Stack):存放函数调用、局部变量、返回地址等。
  5. 进程控制块(PCB, Process Control Block):存储进程的状态、调度信息、打开的文件等。

进程 vs 线程

特性进程(Process)线程(Thread)
定义资源分配的基本单位调度执行的基本单位
资源独立的地址空间、文件、内存共享进程的资源
通信进程间通信复杂(IPC)线程间通信简单(共享内存)
创建开销高(需要分配独立资源)低(共享进程资源)
上下文切换开销大开销小
适用场景适用于独立的任务(如系统服务)适用于并行计算(如多线程下载)

线程的引入

多进程编程可以实现并发。
但随着计算机多核处理器的发展,传统的进程模型面临如下问题:

  1. 进程开销大:进程的创建和销毁需要分配独立的资源,开销较大。
  2. 进程间通信(IPC)复杂:进程需要使用共享内存、管道、消息队列等机制进行通信,效率低下。
  3. 上下文切换成本高:进程切换需要保存和恢复大量状态信息(如寄存器、页表等)。

为了解决这些问题,引入了**线程(Thread)**的概念。

线程的概念

线程是进程的最小执行单位,同一进程中的线程共享进程的资源(代码段、数据段、堆),每个线程有独立的栈和寄存器

线程的优势

  • 更轻量:线程创建和销毁的开销比进程小。
  • 资源共享:同一进程内的多个线程可以共享数据,通信效率高。
  • 并发性更强:多个线程可以同时执行,提高多核 CPU 的利用率。

总结

  1. 进程是资源分配的单位,线程是 CPU 调度的单位
  2. 线程比进程更轻量级,适用于高并发任务
  3. 多进程适合任务隔离,多线程适合并行计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值