Java - 并发编程:基本概念

一、并发与并行

无论是并行还是并发,在用户看来都是“同时”运行的。实际上,一个CPU同一时刻只能执行一个任务。

  • 并发:指两个或多个事件在同一时段内发生,即单核CPU在固定时段内交替执行多个任务
  • 并行:指两个或多个事件在同一时刻发生,即多核CPU同时执行多个任务。

在单处理器(CPU)系统中,每一时刻只能有一道程序执行,多个程序在单 CPU 上采取分时的交替运行(并发执行)。而在多 CPU 系统中,多个程序可以被分配到多个CPU中,实现多任务并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样多个程序便可以同时执行。市场上说的多核处理器指的是多 CPU,内核越多,可以并行执行的程序越多,从而大大提高程序的执行效率。

二、进程与线程

  • 进程(process):进程是操作系统系统运行程序的基本单位。它表示一个正在执行计算机程序的实例(an instance of a computer program is being executed),CPU是程序执行实例的主体。每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程。

  • 线程(thread):线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中至少包含一个线程,且可以并发多个线程,每条线程并行执行不同的任务。

简而言之,一个程序运行后至少占用一个进程,一个进程中可以包含多个线程

进程与线程的区别:

  1. 线程共享创建它的进程的内存空间,而进程之间的内存管理是独立的
  2. 线程可以直接访问其所在进程的数据段,而进程仅拥有父进程的数据段副本
  3. 线程可以直接与其所在进程内的其它线程通信,而进程间通信需要通过一个中间代理实现
  4. 新线程的创建相对容易,而新进程的创建是对父进程的复制
  5. 线程可以控制和操作同一进程里的其他线程,进程只能控制子进程
  6. 对主线程的更改(取消、优先级更改等)可能会影响所在进程中其它线程的行为,对父进程的更改不影响子进程

三、多线程

多线程指的是,在一个进程中开启多个线程,简单的讲,如果多个任务共用一块地址空间,那么必须在一个进程内开启多个线程。

  1. 多线程共享一个进程的地址空间。
  2. 线程比进程更轻量级,线程比进程更容易创建可撤销,在许多操作系统中,创建一个线程比创建一个进程要快10-100倍,在有大量线程需要动态和快速修改时,这一特性很有用
  3. 若多个线程都是CPU密集型的,那么并不能获得性能上的增强,但是如果存在大量的计算和大量的I/O处理,拥有多个线程允许这些活动彼此重叠运行,从而会加快程序执行的速度。
  4. 在多CPU系统中,为了最大限度的利用多核,可以开启多个线程,比开进程开销要小的多。

四、线程调度

  • 分时调度:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。
  • 抢占式调度:优先级高的线程优先使用CPU,如果线程优先级相同,那么会随机选择(线程随机性)。

Java采用的是抢占式线程调度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值