线程基础

85 阅读2分钟

1. 什么是进程、线程

1.1 进程

操作系统把程序加载到内存中,一个程序是可以在内存中加载多份的,每一份就是一个进程。
操作系统会为每个进程分配相应的资源。
进程是操作系统进行资源分配的基本单位

1.2 线程

一个程序里边不同的执行路径就是线程
操作系统会找到主线程,放到CPU去执行,主线程若是开辟了其他新的线程,则会在线程间相互切换执行
线程是调度执行的基本单位
多个线程共享同一个进程里所有的资源

1.3 程序

程序就是可执行文件(XX.exe)

2. 线程切换

步骤:
1.当线程未开始执行时 image.png
2.线程T1运行时,将T1的数据和指令放入CPU进行运行 image.png
3.T1执行时间到,则将T1的数据和指令放入缓存中 image.png
4.将T2的数据和指令放入CPU进行运行 image.png
5.此时若T2的执行时间到,需要继续执行T1则将T2的数据和指令存入缓存,将T1的数据和指令从缓存中拿到CPU中继续执行 image.png 这个过程由操作系统调度

3. 几个简单问题

3.1 单核CPU设定多线程是否有意义

必须有意义
因为一个线程执行时,并不是一直消耗CPU的,当在等待输入或者返回或其他不需要CPU介入情况的时候,就可以将CPU让给其他线程去执行。

3.2 线程数是不是设置的越大越好

当然不是
当线程过多时,线程间的切换也耗费大量资源

3.3 工作线程数(线程池中的线程数量)设置多少合适呢

根据CPU的核数,根据CPU的计算能力来设定
但是也不尽然,实际生产中一般根据实际情况进行压测决定。
线程数设置计算公式 image.png 等待时间和计算时间的比率如何得出呢
预计都是不准确的,只有等项目上线后,由工具测算得出