几个关于并行计算的概念
1、同步和异步
同步和异步通常用来形容一次方法的调用。同步方法调用一旦开始,调用者必须等待方法调用返回后,才能继续后续的行为。
异步方法调用更像一个消息传送,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。异步方法通常会在另外一个线程中"真实"地执行。
2、并发和并行
表示两个或者多个任务一起执行,但侧重点有所不同。
并发偏重于多个任务的交替执行,而多个任务之间有可能还是串行的,而并行是真正意义上的"同时执行"。
3、临界区
表示一种公共资源或者说共享数据,可以被多个线程使用。但每一次,只能有一个线程使用它,一旦临界资源被占用,其它线程要想使用这个资源就必须等待
4、阻塞和非阻塞
阻塞和非阻塞通常形容多线程间的互相影响。
比如一个线程占用了临界区资源,那么其他所用需要这个资源的线程就必须在这个临界区中等待。等待会导致线程的挂起,这种情况就是阻塞。
非阻塞的意思与之相反,它强调没有一个线程可以妨碍其它线程的执行,所有的线程都会尝试不断前向执行。
5、死锁,饥饿和活锁
死锁,饥饿和活锁用来描述线程的活跃性问题
死锁:多个线程彼此占用其他线程的资源,各个线程都不愿意放弃资源,那么这个状态将永远的持续下去,这种状态就是死锁。
饥饿:指一个或多个线程因为种种原因无法获得所需的资源,导致一直无法执行。
活锁:两个线程主动将资源释放给对方使用,那么就会导致资源不断地在两个线程间跳动,而没有一个线程可以同时拿到所有资源正常执行。这种情况就是活锁。