多线程技术概述
进程:
是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间。
拥有独立内存空间的应用程序。
特点:每一个进程的内存空间是独立的,都有自己的堆栈,并且互不共享。
A进程创建一个对象,B进程用不了,除非通过其他手段发过来。
任务管理器页面有应用程序、进程。(如图)
应用程序指的是软件,通常我们认为一个进程就是一个软件,不过现在很多软件都是多进程的。
例如:
音乐播放器
放歌、显示歌词、显示界面
至少三个线程,属于同一款软件音乐播放器,这个进程
线程:
是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行。一个进程最少有一个线程。
线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分成若干个线程。
线程是进程中的一个个执行路径,多个线程之间共享一块内存空间。
当A线程创建了一个变量以后,BCD或更多线程都可以找到它,只要作用域匹配。
软件中的一条执行路径,给这条执行路径一段代码它就可以去执行。
多个执行路径,同时去执行。
线程之间可以自由切换(让某一个线程休息会儿,另一个线程执行一下),并发执行。一个进程最少有一个线程。如果一个进程里面一个线程都没了,表示要执行的事情一件都没了,这个进程马上也要被关闭掉了。
单线程:
一条一条往下走,顺序执行的流程,只有一条执行路径,只做一件事情。
多线程:
在一个程序的进程中开辟多个执行路径。
提高程序效率。
线程调度:
理解为4核分了8线程/8个脑子。有两种分配方式。
分时调度 – 均分,轮流使用。更合理地交替执行。
所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。
假设电脑只有一个CPU/脑子,目前在听歌。
播放音乐,其他东西动不了,操作不了电脑。早期系统就是这样,执行病毒就动不了了,没有时间接受你的键盘输入。
后面出了多进程的操作系统,比如Windows,更合理地将一个CPU的时间切成了N份,分给各个软件轮流使用,给人造成一种假象,多个软件好像在走一样,感知不到中间断断续续在切换。
Java使用的调度机制就是抢占式调度。
抢占式调度 – 优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性)。
打开任务管理器,我们可以选中某个进程,右键调整优先级。
通过代码也可以调整某个线程优先级,优先级越高,抢到时间片(CPU分出来的一个个的时间)再去执行。
都有随机概念。
CPU使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核心而言,某个时刻,只能执行一个线程,而CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。其实,多线程程序并不能提高程序的运行速度(对比排队完成和切换着完成),但能够提高程序运行效率,让CPU的使用率更高。
思考:1000个人访问数据库 排队可能更快,切换次数太多。