线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高
1.进程和线程的区别(并发与并行,串行与并行)
进程至少包含一个线程,这个线程称为主线程、
进程空间是不共享的,比如说QQ,线程空间是共享的,在java多线程模型中,共分为主内存和工作内存。
2.并行与并发:
并发是看起来像同时执行,但是是由于CPU时间分片很短,通过时间片轮训本质还是顺序。
3.并发执行与顺序执行的快慢:
并发执行本质通过CPU轮训,需要保存上次执行的情况,耗费资源与时间,那么为什么并发还要比串型快?因为阻塞,比如说IO操作,造成CPU资源的浪费,本质并发是通过压榨CPU 的方式提升速度。
4.JVM运行时区域和线程的关系:
4.1. 程序计数器为什么是私有的?
程序计数器主要有下面两个作用:
字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。
在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。
4.2. 虚拟机栈和本地方法栈为什么是私有的?
虚拟机栈: 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。
本地方法栈: 和虚拟机栈所发挥的作用非常相似,区别是: 虚拟机栈为虚拟机执行 Java 方法 (也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。 在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。
5. 为什么要使用多线程呢?
本质并发是通过压榨CPU 的方式提升速度。
6. 使用多线程可能带来什么问题?
并发编程的目的就是为了能提高程序的执行效率提高程序运行速度,但是并发编程并不总是能提高程序运行速度的,而且并发编程可能会遇到很多问题,比如:内存泄漏、上下文切换、死锁还有受限于硬件和软件的资源闲置问题。
7.上线文切换概念:什么是上下文切换?
当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。
8.JVM线程和系统线程的关联:
Java线程的实现是基于一对一的线程模型,所谓的一对一模型,实际上就是通过语言级别层面程序去间接调用系统内核的线程模型,即我们在使用Java线程时,Java虚拟机内部是转而调用当前操作系统的内核线程来完成当前任务。
网友评论