写点什么

Java 多线程开发系列 1:操作系统进程与线程

作者:CoderBreakout
  • 2023-11-07
    广东
  • 本文字数:1043 字

    阅读完需:约 3 分钟

Java多线程开发系列1:操作系统进程与线程

要想深入理解和掌握多线程开发,必须先懂得操作系统中的进程和线程,因为无论你使用那种语言,都是跑在操作系统之上的应用,最终都需要借助操作系统的进程和线程完成工作。

操作系统进程


可以从静态和动态两个角度来理解什么叫进程。


从静态的角度,进程是:

  1. 具有独立功能的程序代码。比如一个 APP 程序,或者一个 APP 内独立的子程序。

  2. 是操作系统进行资源分配的基本单位,也是基本的执行单元。进程是一个实体,它有自己独立的资源,包括用于存储代码的文本区、存储本地变量和指令的栈内存和运行时数据的堆内存、文件句柄、寄存器等。

  3. 是线程的容器。现代操作系统调度基本都是基于线程设计,而线程是包含在进程中的,一个进程可以拥有多个线程。


从运行时动态的角度,进程是一个独立功能的程序在某个数据集上的一次运行活动。我们平常讲的进程(个人觉得这个翻译太传神!),更多是指其动态的定义。一个操作系统进程的典型活动描述如下:

  1. 从硬盘读取一个文件到内存(用到硬盘 IO、文件句柄)

  2. 在内存中进行处理(用到栈内存、堆内存、CPU、寄存器)

  3. 发送到网络(用到网络 IO)


在历史上,操作系统曾经都是基于进程来调度的,但后来因为进程的设计过重,系统每次切换进程上下文都需要进行大量的资源备份和恢复,因此出现了线程的概念。

操作系统线程

同样可以从静态和动态的角度来理解线程。


从静态的角度,线程是:

  1. 一段代码,这段代码是进程程序代码的一部分。可以很长,也可以很短。

  2. 操作系统调度的基本单位。进程是操作系统资源分配的基本单位,线程是操作系统调度的基本单位。进程和线程的结合,巧妙的实现了成员运行时资源独立和调度灵活的平衡。


从动态的角度理解,一条线程是进程中一个单一顺序的控制流。一个进程可以包含多个线程,这些线程可以同时运行。所有线程共享父进程中的所有资源,比如虚拟地址空间、文件描述符、信号量等,但有自己独立的调用栈、寄存器和自己的本地存储。硬币有两面,线程共享父进程的资源带来了调度灵活的便利,也带来了共享的竞争烦恼。理解这一点,会给我们后来理解 java 平台生态中各种多线程编程的设计思路带来很大的帮助。

总结

本文介绍了操作系统中进程和线程的基本概念,理解这些概念是后来我们理解 Java 多线程各种设计的基础。


本文的重点内容概括如下:


  1. 进程是操作系统资源分配的基本单元,线程是操作系统调度的基本单元;

  2. 进程和线程的设计,体现了操作系统对于资源管理和调度管理的巧妙平衡;

  3. 线程是进程的一部分,一个进程可以包括多个线程,这些线程共享父进程的资源,共享资源带来了调度的灵活性,也带来了资源竞争的烦恼。

发布于: 刚刚阅读数: 3
用户头像

CoderBreakout

关注

宁静致远,快乐随行,知行合一,得大自在! 2008-10-08 加入

一个程序员,一名架构师,一位技术管理人......

评论

发布
暂无评论
Java多线程开发系列1:操作系统进程与线程_线程_CoderBreakout_InfoQ写作社区