并发编程优缺点及相关概念。
并发编程优缺点
优点
摩尔定律历时半个世纪已不再有效,单位面积的集成电板所堆砌晶体管数量已达瓶颈,采用将多个计算单元整合到一起的方案,也就是当下的多核
cpu。通过并发编程可以压榨cpu算力,从而提升性能。
缺点
-
频繁切换上下文
cpu每次切换上下文时,需要保存当前的状态,以便能够进行恢复先前状态,而这个切换时非常损耗性能,过于频繁反而无法发挥出多线程编程的优势。
-
线程安全
多线程编程中要求线程通信,而共享资源就是临界区,稍微不注意就会出现死锁的情况,一旦产生死锁就会造成系统功能不可用。
相关概念
线程&进程
进程是线程的集合,线程是程序执行的最小单元。
同步异步
同步和异步通常用来形容一次方法调用。同步方法调用一开始,调用者必须等待被调用的方法结束后,调用者后面的代码才能执行。而异步调用,指的是,调用者不用管被调用方法是否完成,都会继续执行后面的代码,当被调用的方法完成后会通知调用者。比如说顺序结构就是同步调用。发送邮件一般都是异步调用。
并发与并行
并发指的是多个任务一起开始执行,执行期间多个任务交替进行,而并行则是指真正意义上的同时进行。java多线程是并发操作。
阻塞和非阻塞
阻塞和非阻塞通常用来形容多线程间的相互影响,比如一个线程占有了临界区资源,那么其他线程需要这个资源就必须进行等待该资源的释放,会导致等待的线程挂起,这种情况就是阻塞。
而非阻塞就恰好相反,它强调没有一个线程可以阻塞其他线程,所有的线程都会尝试地往前运行。
临界区
临界区或者说临界资源用来表示共享数据,可以被多个线程使用。但是当线程想使用临界区资源时,一旦临界区资源被另一个线程占有,那么其他线程必须等待。