各大网站投放广告怎么做,建行信用卡中心官网,it行业做网站一个月多少钱,wordpress 推荐插件进程 进程是运行着的程序#xff0c;是程序在操作系统的一次执行过程#xff0c;进程是操作系统分配资源的基本单位。 启动一个java程序#xff0c;操作系统就会创建一个java进程 进程也可以看作一个程序的实例#xff0c;大部分程序可以运行多个实例进程#xff0c;比如记…进程 进程是运行着的程序是程序在操作系统的一次执行过程进程是操作系统分配资源的基本单位。 启动一个java程序操作系统就会创建一个java进程 进程也可以看作一个程序的实例大部分程序可以运行多个实例进程比如记事本有的程序只能启动一个实例进程如果qq音乐。
线程 线程可以理解为一个进程的执行实体多个线程组成一个进程是操作系统调度资源的基本单位。 一个线程就是一个指令流是真正可以运行在cpu上的执行单元。
对比
进程基本相互独立线程存在进程之内。进程拥有共享的资源供内部线程共享。进程通信同一台计算机的进程通信称为IPCInter-process communication不同计算机通信需要经过网络遵循例如HTTP的协议。线程通信共享进程的内存比如多个线程可以访问同一共享变量。线程更加轻量线程上下文切换成本往往低于进程上下文切换。 并行与并发 单核cpu线程是串行的但是任务调度器将cpu时间片分给不同线程。给人一种微观串行宏观并行的感觉。 线程轮流使用cpu这就是并发concurrent 并行parallel多核cpu每个核都可以调度线程这时线程是并行的。
下图中即有并行同一时刻两个core调度不同的线程也有并发4个线程轮流地使用core。 同步与异步
同步需要等待结果返回才能继续运行
异步不需要等待结果返回就能继续运行。多线程可以让方法变成异步。
例如如下代码就是异步的主线程和新线程一起启动主线程无需等待另一个线程结束就可以执行打印”do“。 Slf4j(topic c.Async)public class Async {public static void main(String[] args){new Thread(() - {String s do it !!!;try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(s);}).start();log.debug(do);}} 应用场景举例 例如项目中的视频文件格式转换需要耗费大量时间这时候就需要新开一个线程处理视频文件格式转换避免阻塞了主线程。 提高效率 多线程的目的是为了充分利用多核CPU。 比如我们要执行三次计算分别耗时10ms11ms12ms。如果我们可以开三个线程分别运行那我们理论上的运行时间取决于最大用时也就是12ms。 但如果是单核cpu串行用时101112 33ms如果这时开三个线程时间肯定大于33ms因为cpu是单核的实际上还是在串行执行这些线程还需要上下文切换的时间更加耗时。 所以单核cpu下的多线程实际上并不会提高运行效率而是可以再不同任务间切换避免一个线程总占用cpu。