多线程-你必须知道的几个概念

1.同步(Synchronous)和异步(Asynchronous)

  同步和异步通常用来形容一次方法调用。

  同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。

  异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续操作。

  多线程-你必须知道的几个概念_第1张图片

2.并发(Concurrency)和并行(Parallelism)

  并发和并行是两个非常容易被混淆的概念,它们都可以表示两个或者多个任务一起执行,但是侧重点不同。

  并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的,而并行是真正意义上的“同时执行”

  多线程-你必须知道的几个概念_第2张图片

3.临界区

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

  eg:一台打印机一次只能执行一个任务,剩下的等待当前执行结束之后在执行;

4.阻塞(Blocking)和非阻塞(Non-Blocking)

  阻塞和非阻塞通常用来形容多线程间的相互影响。

  阻塞:一个线程占用了临界区资源。那么其他所有需要这个资源的线程就必须在这个临界区中等待。等待会导致线程挂起;

  非阻塞与之相反,它强调没有一个线程可以妨碍其他线程执行,所有的线程都会尝试不断向前执行;

 

5.死锁(Deadlock)
  死锁:两个或者多个线程互相持有对方需要的资源,导致无限的等待;

  

你可能感兴趣的:(多线程-你必须知道的几个概念)