- 多线程基础概念
- 进程,线程
- 进程
- 进程,线程
操作系统进行资源(包括cpu、内存、磁盘IO等)分配的最小单位;
进程创建以及切换开销大;资源分配的基本单位。
-
-
- 线程
-
资源调度的基本单位。
如打开的微信,浏览器,是一个进程;但是可能包含多个子任务,即多个线程。
线程之间的切换,称为时间片轮转法
-
- 串行,并发,并行
- 串行
- 串行,并发,并行
多个任务,执行时一个执行完再执行另一个。
-
-
- 并发
-
多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程。
-
-
- 并行
-
每个线程分配给独立的核心,线程同时运行。
比喻:一边吃饭一边看球赛,一个用眼一个用嘴。
-
- 多核下线程数量选择
- 计算密集型
- 多核下线程数量选择
程序主要为复杂的逻辑判断和复杂的运算。
cpu的利用率高,不用开太多的线程,开太多线程反而会因为线程切换时切换上下文而浪费资源。
-
-
- IO密集型
-
程序主要为IO操作,比如磁盘IO(读取文件)和网络IO(网络请求)。
IO操作会阻塞线程,cpu利用率不高,可以开多点线程,阻塞时可以切换到其他就绪线程,提高cpu利用率。
-
- 线程分类
- 守护线程
- 线程分类
thread.setDaemon(true)设置为守护线程,且在thread.start()之前;当前台线程运行完成时,jvm会自动杀死守护线程,finally{}等不执行。守护线程中产生的线程也是守护线程。不能用于读写。典型应用:GC回收
-
-
- 用户线程
-
普通的线程。区别在于系统中如果只剩余守护线程时,JVM可以退出;但存在用户线程则不会退出。