1.认识进程、线程、任务
进程(Process):是程序运行的实例,是系统分配资源的基本单位。(例如:一个正在运行的浏览器就是一个进程)
线程(Thread):是进程中可独立执行的最小单位,即一个独立的执行流,多个线程之间可以执行多份代码。
任务:线程所要完成的计算就称为任务。
2.有关线程
2.1 为什么需要线程
首先,“并发编程”称为当下的刚需。
1)单核cpu的提升遇到瓶颈,想要提升算力就需要使用多核cpu并且合理利用多核cpu,而并发编程可以很好的利用多核cpu。
2)有一些应用场景下需要等待IO(例如:使用scanner的next()函数 就需要等待用户输入数据),为了让等待IO的情况下cpu可以做其他的工作,就需要用到并发编程。
其次,虽然多进程也能实现并发编程,但是多线程更加轻量化,理由如下:
1)进程的创建与销毁均要慢于线程
2)运行一个程序,多进程占用的资源高于多线程
3)线程的调度快于进程
最后, 线程虽然⽐进程轻量, 但是⼈们还不满⾜, 于是⼜有了 "线程池"(ThreadPool) 和 "协程"
2.2 线程与进程的区别
1)进程包含线程,一个进程包含一个或多个线程。
2)进程是系统分配资源的基本单位,线程是系统调度的基本单位。
3)进程与进程之间不共享资源,但是一个进程的多个线程之间共享这个进程的资源
4)一个进程的报错崩溃往往不会影响其他的进程,但是一个进程的多个线程之间报错崩溃可能会影响其他的线程,即引发“线程安全”问题。
5)线程的创建、销毁、调度效率均快于进程,每个线程有自己执行的任务。
2.3 Java线程于操作系统线程的关系
线程是操作系统中的概念,操作系统的内核实现了线程这样的机制,并对用户提供了一些API供用户使用。
Java标准库中的 Thread类可以看作对这些API的封装和抽象
3.进程与线程的关系图
下图中使用波浪线来表示线程,使用方块表示进程,帮助你进一步理解线程于进程