一、进程与线程
1、进程
看成是一个程序的实例,已经被加载如CPU中,进程是由多个线程组成的,用来加载指令、管理内存、管理IO的。当一个程序被执行,从磁盘加载这个程序的代码至内存,就开启了一个进程。在Java中进程是资源分配的最小单位,在winodows中进程是不活动的,作为线程的容器。
2、线程
负责执行指令,一个线程就是指令流,将指令流中的一条条指令以一定的顺序交给CPU执行,在Java中线程作为最小调度单位。
3、线程与进程的异同
1、进程基本上是相互独立的,线程在进程里面,是进程的子集,
2、进程拥有共享的资源,如内存空间等共其内部的线程共享并使用。
3、进程通信比较复杂,同一台计算机的进程通信叫作IPC,不同计算机之的进程通信要经过网络。
4、线程共享进程内的内存,因而可以轻而易举实现线程通信。
5、进程上下文切换成本比线程高。
二、上下文切换
1、基本概念
上下文切换(从使用CPU到不使用CPU):当CPU处理线程或进程时,任务调度器给每个线程分配时间片,时间片用完会进入阻塞状态,这是会切换其他线程或进程工作叫作上下文切换。
2、原因
1、线程的cpu时间片用完
2、垃圾回收
3、有更优先的线程需要运行
4、线程调用了sleep、yield、wait、join、synchronized、lock等方法
3、影响
发生上下文切换,操作系统要保存当前线程的状态(包括程序计数器、虚拟机栈、栈帧中的信息),并恢复另一个线程的状态(类似于程序计数器)频繁的上下文切换会影响性能。
三、并发与并行
并发(Concurrent):操作系统中的任务调度器,为线程分配时间片,让线程轮流使用CPU。
并行:在多核CPU下同时处理不同的事情,如果线程数大于核心数既有并行也有并发,并行不一定能够提升效率,能把任务拆分为多个小任务时才能提升效率。多核CPU才能实现并行,单核CPU执行并行操作时仍是轮流串行执行(并发),单核CPU执行多线程只是能够让不同的线程轮流使用CPU,不至于一个线程总占用CPU,别的线程没办法干活。
四、同步与异步
同步:需要等待结果返回,才能继续运行。(同线程)
异步:不需要结果返回,就能运行。(不同线程)