Java多线程复习:1(进程和线程、并发和并行)

进程和线程

进程

  • 我们电脑中每一个运行着的程序都是一个进程,程序一旦运行就是进程。

  • 进程可以视为程序的一个实例,大部分程序可以同时运行多个实例进程(如:浏览器、记事本、画图等),也有的程序只能启动一个实例进程(如:360安全卫士等)

  • 我们电脑中每一个运行着的程序都是一个进程,程序一旦运行就是进程。

  • 进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间。

  • 一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。

线程

  • 一个进程可以分配到一个或者多个线程。

  • 一个线程就是一个指令流,将指令流中的一条条指令以一定顺序交给CPU执行。

  • Java中,线程作为最小的调度单位,进程作为资源分配的最小单位。在windows中进程是不活动的,只是作为线程的容器。

两者对比

进程基本上是相互独立的,而线程存在于进程之内,相当于进程的一个子集

进程拥有共享的资源,如内存空间等,供其内部线程共享

进程间的通信比较复杂

  • 同一台计算机之间的进程通信称为IPC
  • 不同计算机之间的进程通信要通过网络,并遵循一定的协议,如:HTTP协议

线程通信相对简单,因为它们共享进程内的内存,多个线程可以访问同一个共享变量

线程更轻量,线程上下文切换成本一般比进程上下文切换低

并发和并行

并发

单核 cpu 下,线程实际还是串行执行的。操作系统中有一个组件叫做任务调度器,将 CPU 的时间片(windows下时间片最小约为 15 毫秒)分给不同的程序使用,只是由于 CPU 在线程间(时间片很短)的切换非常快,人类感觉上程序是同时运行的
总结为一句话就是: 微观串行,宏观并行
一般将这种线程轮流使用 CPU的做法称为并发(concurrent)

CPU时间片
CPU时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片
在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。
在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。

如下图:
在这里插入图片描述

并行

多核CPU下,每个 核(core) 都可以调度运行线程,这时候线程可以是并行的。

在这里插入图片描述

两者对比

并发(concurrent)是同一时间应对(dealing with)多件事情的能力
并行(parallel)是同一时间动手做(doing)多件事情的能力

例子:
家庭主妇做饭、打扫卫生、给孩子喂奶,她一个人轮流交替做这多件事,这时就是并发
家庭主妇雇了个保姆,她们一起这些事,这时既有并发,也有并行(这时会产生竞争,例如锅只有一口,一个人用锅时,另一个人就得等待)
雇了3个保姆,一个专做饭、一个专打扫卫生、一个专喂奶,互不干扰,这时是并行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值