前言

并行是近来软件工程中常出现的词,为啥会出现并行的说法呢?归根到底是因为计算机硬件的发展跟不上软件的进程。

大家应该都知道摩尔定律。如果不知道的可以去查查,看看摩尔定律是什么。

但是大家知道摩尔定律失效了吗?

下边引用顶级计算机科学家​唐纳德·尔文·克努斯​的话说

– 在我看来,这种现象(并发)或多或少是由于硬件设计者
– 已经无计可施了导致的,他们将摩尔定律失效的责任
– 推脱给软件开发者。

随着摩尔定律的失效也就有了并发的需要。下边就来介绍几个并发的基本概念。

正文

一、同步(synchronous)和异步(asynchronous)

1、同步指发送一个请求,需要等待返回,然后才能够发送下一个请求,有等待过程;

2、异步是当请求的响应数据完全收到之时,会执行一个指定的回调函数,而在执行异步请求的同时,浏览器会正常地执行其他事务的处理,不需要等待。

同步与异步的比较: 异步的好处在于非阻塞(调用线程不会暂停执行去等待子线程完成),因此我们把一些不需要立即使用结果、较耗时的任务设为异步执行,可以提高程序的运行效率。 简单来说,就是同步是一个完成后,下一个才可以再开始,而异步是一个在进行时,下一个也可以开始进行。

有关并行的几个重要概念_概念

二、并发(Concurrency)和并行(Parallelism)

1、并行是指两个或者多个事件在同一时刻发生;

2、并发是指两个或多个事件在同一时间间隔发生。

有关并行的几个重要概念_概念_02

三、 临界区

临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待

有关并行的几个重要概念_临界区_03

四、阻塞(Blocking)和非阻塞(Non-Blocking)

阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程占用了临界区资源,那么其它所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。

非阻塞允许多个线程同时进入临界区

结束

今天先写这几个简单的概念,有兴趣的可以研究研究什么是

Amdahl定律(阿姆达尔定律)

Gustafson定律(古斯塔夫森)

这两个定律是关于并发中的重要定律。我可能会在接下来的博客中介绍这两个定律。