思考:
进程和线程到底是个什么样的关系?
比如,当我们运行了一个java程序,进入到这个主方法以后,它到底是一个线程呢?还是一个进程呢?
进程可以起一个线程,那线程能不能再起一个线程呢?
线程的生命周期,它到底是5个?还是7个?
线程的同步机制是什么?
线程同步和互斥到底是个什么关系?
程序是一个静态的概念。通俗的讲它就是你写的代码,经过编译一系列之后的一个东西。程序在被安装好在操作系统之后,没有去启动它、运行它,它就单纯的在硬盘中是一个静态的文件。
启动了一个进程,操作系统就会为该进程分配内存空间。
进程是程序的一次执行过程,或是正在运行的一个进程。是动态过程:有它自身的产生、存在和消亡的过程。
比如,启动迅雷 就是一个正在运行中的进程——用迅雷下载一个文件,一个下载任务对应一个线程,不管下载什么文件内容——用迅雷同时下载多个文件,就是多个线程。
单线程:同一时刻,只允许执行一个线程。
多线程:同一时刻,可以执行多个线程。
比如:一个qq进程,可以同时打开多个聊天窗口和好友聊天
一个迅雷进程,可以同时下载多个文件
由于cpu的运行速度很快,多个任务在单个cpu处理器中切换进行的时候就造成一种“貌似同时”的错觉
并行:同一时刻,多个任务同时进行。多核cpu可以实现并行。
比如,有两个cpu,有10个任务需要处理
cpuA:分配1、2、3、4、5任务
cpuB:分配6、7、8、9、10任务
并行:对于cpuA和cpuB,它俩各自要处理5个任务,在同一时刻,cpuA和cpuB同时都在执行手里各自的任务就叫并行。
并发:对于cpuA或cpuB,只针对某一个cpu,同一时刻,执行多个任务,这多个任务在某个cpu上是交替进行的就叫并发。
并发 和 并行 ,抽象的讲:
并发是针对一个cpu或者说单核,即一个人只凭借它自己单身二十年的手速处理多个任务,俗称单人运动。
并行是针对 多个cpu之间 或者说 多核,即多个人有着手速处理各自手上的任务,俗称多人运动。