前言
并行是近来软件工程中常出现的词,为啥会出现并行的说法呢?归根到底是因为计算机硬件的发展跟不上软件的进程。
大家应该都知道摩尔定律。如果不知道的可以去查查,看看摩尔定律是什么。
但是大家知道摩尔定律失效了吗?
下边引用顶级计算机科学家唐纳德·尔文·克努斯的话说
– 在我看来,这种现象(并发)或多或少是由于硬件设计者
– 已经无计可施了导致的,他们将摩尔定律失效的责任
– 推脱给软件开发者。
随着摩尔定律的失效也就有了并发的需要。下边就来介绍几个并发的基本概念。
正文
一、同步(synchronous)和异步(asynchronous)
1、同步指发送一个请求,需要等待返回,然后才能够发送下一个请求,有等待过程;
2、异步是当请求的响应数据完全收到之时,会执行一个指定的回调函数,而在执行异步请求的同时,浏览器会正常地执行其他事务的处理,不需要等待。
同步与异步的比较: 异步的好处在于非阻塞(调用线程不会暂停执行去等待子线程完成),因此我们把一些不需要立即使用结果、较耗时的任务设为异步执行,可以提高程序的运行效率。 简单来说,就是同步是一个完成后,下一个才可以再开始,而异步是一个在进行时,下一个也可以开始进行。
二、并发(Concurrency)和并行(Parallelism)
1、并行是指两个或者多个事件在同一时刻发生;
2、并发是指两个或多个事件在同一时间间隔发生。
三、 临界区
临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待
四、阻塞(Blocking)和非阻塞(Non-Blocking)
阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程占用了临界区资源,那么其它所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。
非阻塞允许多个线程同时进入临界区
结束
今天先写这几个简单的概念,有兴趣的可以研究研究什么是
Amdahl定律(阿姆达尔定律)
Gustafson定律(古斯塔夫森)
这两个定律是关于并发中的重要定律。我可能会在接下来的博客中介绍这两个定律。