多线程基本概念

1.同步&异步

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

同步方法一旦开始调用,调用者必须等待调用方法的返回,才能继续下面的操作。

异步方法更像一次消息的传递,不必等待调用方法的返回,一旦调用,立即返回,继续下面的操作,被调用的方法在另外一个线程中执行。

2.并发&并行

并发和并行这两个概念比较容易混淆,他们都表示两个或多个任务一起执行,但是偏重点不同。并发偏重于多个任务交替执行,而多个任务间还可能是串行的,而并行才是真正意义上的“同时执行”。

严格意义上讲,并行的多个任务是真实的同时执行,而对于并发来讲,这个过程只是交替的,一会执行任务A,一会又执行任务B,系统会在A和B之间不停的切换,但对于外部观察者来说,即使多个任务之间是串行的,也会造成并行的错觉。

举个例子,古人云“食不言,寝不语”中的上半句,意思是说吃饭的时候不能说话,这里我们把吃饭和说话当做任务A和任务B,在我们现在的生活当中,平时聚餐大家都是边吃边说,就是任务A和B在交替串行,这就是并发。

还有我们在旅游时,一边走路一边看风景,这里走路和看风景就是两个不同的任务,我们“边走边看”,其实就是并发,当我们做到缆车中行进的时候,这个时候“走路”和“看风景”就是并行了。

3.临界区

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

比如,办公室中的打印机就好比临界区,两个员工同时打印文件,只能有一个先打印,另一个后打印,对于打印机而言,不可能同时打两份文件。

4.阻塞&非阻塞

阻塞和非阻塞表示多线程间的相互影响,比如A线程占用了临界区的资源,在释放资源前,B和C线程需要这个临界区的资源的时候,就必须等待,等待会导致线程挂起,这就是阻塞。非阻塞刚好相反,A、B、C三个线程之间不会互相妨碍

你可能感兴趣的:(多线程基本概念)