张小飞的Java之路——第二十一章——进程和线程

本文通过对话形式,介绍了进程和线程的概念。进程是系统中为程序运行划分的内存空间,线程是程序运行时的指令流,是CPU执行的最小单位。一个进程至少包含一个线程,多线程使得程序可以并行执行。CPU在多个线程间快速切换,创造出同时执行的假象。过多线程可能导致线程调度延迟,造成程序卡顿。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:

视频是什么东西,有看文档精彩吗?

视频是什么东西,有看文档速度快吗?

视频是什么东西,有看文档效率高吗?


诸小亮:从今天开始我们学习——多线程

张小飞:多线程?传说这是作为一个程序员的基本素养,真的吗?

诸小亮:是的,学些多线程之前,我们需要了解一些基本概念

张小飞:都有哪些概念呢?

1. 进程

诸小亮:首先,我们需要知道什么是——进程

  • 进程:是系统中从内存中划出的给程序运行的空间,用于存储程序运行时的数据

张小飞:也就是说,它是一块大大的内存?

诸小亮:额…,也可以这么说吧,另外,在 window 系统中查看进程:

image.png

结果:

image.png
张小飞:一个软件对应一个进程?

诸小亮:没错,准确的来说,当软件启动后,会从操作系统的内存中划出一块儿空间,供这个软件使用

2. 线程

张小飞:那什么是线程?

诸小亮:线程,是可执行的计算单元(计算任务)

  • CPU最终执行的是指令,而线程就是程序运行时的指令流

张小飞:那,线程跟进程的关系是?

  • 一个进程至少有一个线程,如果进程中有多个线程,那么就是多线程程序


张小飞:可以这样理解吗?把一个工厂当作进程,那么线程就是里面的一条条流水线

诸小亮:当然

张小飞:现在电脑上的软件是不是都支持多线程?

诸小亮:一般都支持,比如:

11.gif
上图,点开了 360 的木马查杀和电脑清理,它们在同时运行,也就是说360这个进程中至少有2个线程在运行

诸小亮:另外,在任务管理器中,可以看到系统中所有的进程和线程数量

image.png

3. CPU、内存、线程

诸小亮:你知道CPU是干什么的吗?

张小飞:当然知道了

  • CPU:是计算机的大脑,用来计算数据,没有CPU的计算机只能当硬盘使用

诸小亮:那么内存呢?

张小飞:这个之前已经经过了

  • 内存:软件运行时需要数据,从硬盘上获取太慢,所以把数据放到内存中,从内存中读取比较快

诸小亮:嗯,不错,所以我们需要明白

  • 程序在运行时,真正执行运算的其实是CPU内存只是用来分配空间和存储数据

张小飞:不过,CPU和线程有什么关系?

诸小亮:关系太大了

  • 代码的运行都是由线程控制的,而线程的执行是由CPU控制的,一个CPU在同一时刻只能执行一个线程

张小飞:那,如果是多线程呢?

诸小亮:如果有多个线程,CPU会自动选择,执行A一会儿,执行B一会儿,执行 B 的时候 A 暂停

张小飞:不对吧,我们的电脑明明可以同时运行多个软件啊

诸小亮:造成这样的原因,有两个

  • CPU执行命令和切换线程的速度非常快(纳秒级别),所以虽然有多个线程,但给我们感觉它们在同时运行
  • 目前我们的电脑都是多CPU,所以可以同时执行多个程序

张小飞:原来如此

诸小亮:另外,还需要注意一点

  • CPU切换线程是随机的,线程太多可能导致有些线程很晚才切换到,这也是某些程序卡死的原因

比如:
image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值