[开发资料] 线程概述

[复制链接]
1099|3
 楼主| 小夏天的大西瓜 发表于 2024-5-22 16:00 | 显示全部楼层 |阅读模式

线程是轻量级的进程(LWP:light weight process),在 Linux 环境下线程的本质仍是进程。在计算机上运行的程序是一组指令及指令参数的组合,指令按照既定的逻辑控制计算机运行。操作系统会以进程为单位,分配系统资源,可以这样理解,进程是资源分配的最小单位,线程是操作系统调度执行的最小单位。

先从概念上了解一下线程和进程之间的区别:

进程有自己独立的地址空间,多个线程共用同一个地址空间
线程更加节省系统资源,效率不仅可以保持的,而且能够更高
在一个地址空间中多个线程独享:每个线程都有属于自己的栈区,寄存器 (内核中管理的)
在一个地址空间中多个线程共享:代码段,堆区,全局数据区,打开的文件 (文件描述符表) 都是线程共享的
线程是程序的最小执行单位,进程是操作系统中最小的资源分配单位
每个进程对应一个虚拟地址空间,一个进程只能抢一个 CPU 时间片
一个地址空间中可以划分出多个线程,在有效的资源基础上,能够抢更多的 CPU 时间片
1.png
CPU 的调度和切换:线程的上下文切换比进程要快的多
上下文切换:进程 / 线程分时复用 CPU 时间片,在切换之前会将上一个任务的状态进行保存,下次切换回这个任务的时候,加载这个状态继续运行,任务从保存到再次加载这个过程就是一次上下文切换。

线程更加廉价,启动速度更快,退出也快,对系统资源的冲击小。
在处理多任务程序的时候使用多线程比使用多进程要更有优势,但是线程并不是越多越好,如何控制线程的个数呢?

文件 IO 操作:文件 IO 对 CPU 是使用率不高,因此可以分时复用 CPU 时间片,线程的个数 = 2 * CPU 核心数 (效率最高)

处理复杂的算法 (主要是 CPU 进行运算,压力大),线程的个数 = CPU 的核心数 (效率最高)

小小蚂蚁举千斤 发表于 2024-6-11 16:23 | 显示全部楼层
线程是轻量级的进程(LWP:light weight process),在 Linux 环境下线程的本质仍是进程。
jf101 发表于 2024-6-27 22:15 | 显示全部楼层
文件 IO 对 CPU 是使用率不高,因此可以分时复用 CPU 时间片
szt1993 发表于 2024-6-28 11:24 | 显示全部楼层
Linux 环境下线程的本质仍是进程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

273

主题

2368

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部