多线程简介
1. 并发与并行的区别:
二者之间的区别在于,并发指的是一个处理器同时处理多个任务,并行指的是多个处理器或者是多核的处理器同时处理多个不同的任务.
2. 并发是逻辑上的同时发生,而并行是物理上的同时发生.
3. 例如:
并发:如同一个人(CPU)喂2个孩子(程序),轮流着每个孩子喂一口,表面上看是两个孩子都在吃饭.
并行:如同2个人喂两个孩子,两个孩子也同时在吃饭.
4. 如下图所示:
5. 进程:
一种比较通俗的说法就是在 Windows 下面每打开一个应用程序,如 QQ, Word, WeChat, 系统就打开了一个进程,进而系统为这个进程分配相关的资源,如 CPU, 内存.
6. 线程:
线程是进程中的一个的实体,通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源.
7. 进程与线程:
一个进程代表着一个独立的运行环境,它可以看作是一个程序或者一个应用. 而线程是在进程中的一个任务. Java 运行环境是一个包含了不同的类和程序的单一进程. 线程可以称为轻量级进程,线程只需要较小的资源来创建和驻留在进程中,并且可以共享进程中的资源.
8. 在多线程中,什么是上下文切换:
上下文切换是存储和恢复 CPU 状态的过程,它使线程的执行能够从中断点恢复执行. 上下文切换是多任务操作系统和多线程环境的基本特征.
9. 线程与进程:
进程:只是一个静态的概念,就是机器上面的一个 .exe 文件,一个应用程序,它不能动.
进程的执行:表示进程里面的主线程开始执行了, main 方法开始执行了.
线程:是一个程序里面不同的执行路径(一个程序内部的顺序控制流).
二者不同点:每个进程都有独立的代码和数据空间(进程上下文), 进程之间的切换会有较大的开销.
线程可以看做是轻量级的进程,同一类线程共享代码和数据空间, 每一个线程有独立的运行栈和程序计数器(PC), 线程之间的切换开销小.
多进程:在操作系统中,能够同时运行多个任务(程序).
多线程:在同一个应用程序中,有多个顺序流同时执行.
10. 多线程编程的好处:
在多线程程序中, 多个线程被并发的执行以提高程序的效率, CPU 不会因为某个线程需要等待资源而进入空闲状态. 多个线程共享堆内存(Heap memory), 因此创建多个线程去执行一些任务会比创建多个进程更好.
【注】: 在同一个时间点上, 一个 CPU 只能支持一个线程在运行, 只不过速度很快, 你看起来就像多线程一样.
【注】: 在我们的机器里面, 实际上运行的都是线程.
【注】: dos 只支持单进程, 同一个时间点, 只能有一个进程在执行.