1. 什么是进程、线程
1.1 进程
操作系统把程序加载到内存中,一个程序是可以在内存中加载多份的,每一份就是一个进程。
操作系统会为每个进程分配相应的资源。
进程是操作系统进行资源分配的基本单位
1.2 线程
一个程序里边不同的执行路径就是线程
操作系统会找到主线程,放到CPU去执行,主线程若是开辟了其他新的线程,则会在线程间相互切换执行
线程是调度执行的基本单位
多个线程共享同一个进程里所有的资源
1.3 程序
程序就是可执行文件(XX.exe)
2. 线程切换
步骤:
1.当线程未开始执行时
2.线程T1运行时,将T1的数据和指令放入CPU进行运行
3.T1执行时间到,则将T1的数据和指令放入缓存中
4.将T2的数据和指令放入CPU进行运行
5.此时若T2的执行时间到,需要继续执行T1则将T2的数据和指令存入缓存,将T1的数据和指令从缓存中拿到CPU中继续执行
这个过程由操作系统调度
3. 几个简单问题
3.1 单核CPU设定多线程是否有意义
必须有意义
因为一个线程执行时,并不是一直消耗CPU的,当在等待输入或者返回或其他不需要CPU介入情况的时候,就可以将CPU让给其他线程去执行。
3.2 线程数是不是设置的越大越好
当然不是
当线程过多时,线程间的切换也耗费大量资源
3.3 工作线程数(线程池中的线程数量)设置多少合适呢
根据CPU的核数,根据CPU的计算能力来设定
但是也不尽然,实际生产中一般根据实际情况进行压测决定。
线程数设置计算公式
等待时间和计算时间的比率如何得出呢
预计都是不准确的,只有等项目上线后,由工具测算得出