并发和并行
并发和并行是既相似又有区别(微观概念)
并行:指两个或多个事件在同一时刻点发生。
并发:指两个或多个事件在同一时间段发生。
在操作系统中,在多道程序环境下,并发性是指在一段事件内宏观上有多个程序在同时运行,但在单CPU系统中,每一时刻却仅能有移到程序执行(时间片),故微观上这些程序只能是分时地交给执行。
倘若计算机系统中有多个 CPU,则这些可以并发执行的程序便可被分配到多个处理器上,实现多任务并行执行,即利用每个处理器来处理一个可并发执行的程序。这样,多个程序便可以同时执行,因为是微观的,所以用户在使用电脑的时候感觉就是多个程序是同时执行的。
单核处理器的计算机肯定是不能并行得处理多个任务的,只能是多个任务在单个 CPU 上并发运行。同理,线程也是一样,从宏观角度上理解线程是并行运行的,但是从围观角度上分析却是串行运行的。即一个线程一个线程地去运行,当系统只有一个 CPU 时,线程会以某种顺序执行多个线程,这种情况称之为线程调度。
时间片:即 CPU 分配给多个程序的运行时间(很小的概念)
进程和线程
进程是指一个内存中运行状态的应用程序。每一个进程都有自己独立的一块内存空间,一个应用程序可以同时启动多个进程。
线程是指进程中的一个执行任务(控制单元),一个进程可以同时并发运行多个线程。
多进程:操作系统中同时运行的多个程序。
多线程:在同一个进程中同时运行的多个任务。
在操作系统中允许多个任务,每一个任务就是一个进程,每一个进程也可以同时执行多个任务,每一个任务就是线程。
进程与线程的区别:
进程:有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的,至少有一个线程。
线程:堆空间是共享的,栈空间是独立的,线程消耗的资源也比进程小,相互之间可以影响,又成为轻型进程或进程元。
因为一个进程中的多个线程是并发运行的,那么从围观角度上考虑也是有吸纳后顺序的,那么哪个线程执行完全取决于 CPU 调度器(JVM 来调度),程序无法控制。
可以把多线程并发性看做是多个线程在瞬间抢 CPU 资源,先强盗就运行,这也早就了多线程的随机性>
Java 程序的进程至少包含主线程和垃圾回收线程(后台线程、守护线程)。