何为并发
计算机领域的并发指的是在单个系统里同时执行多个独立的任务,而非顺序的进行一些活动。
使用并发
-
使用并发的第一种方法,是将应用程序分为多个独立的进程,它们在同一时刻运行,就像同时进行网页浏览和文字处理一样。
优点是进程间通信不复杂,但速度慢、开销大(多个进程有固定的开销:进程的启动、管理进程等)。
-
在单个进程中运行多个线程。
进程中的所有线程都共享地址空间,并且所有线程访问到大部分数据———全局变量仍然是全局的,指针、对象的引用或数据可以在线程之间传递。
地址空间共享,以及缺少线程间数据的保护,使得操作系统的记录工作量减小,所以使用多线程相关的开销远远小于使用多个进程。不过,共享内存的灵活性是有代价的:如何保证数据的一致性。
为何使用并发?
-
分离关注点 —— 基于概念设计
-
提升性能
利用并发提升性能的方式:
-
任务并行(task parallelism)
-
数据并行(data parallelism)
-
并行化的缺点
-
使用并发容易造成代码难理解,编写和维护多线程的代码成本提升,同时额外的复杂性可能引起跟多的错误。
-
使用多线程,系统需要分配内核资源和堆栈空间,开销会对性能产生影响。
-
同时,线程是有限的资源。过多的线程会使性能整体缓慢。运行越多的线程,操作系统就需要做越多的上下文切换。
使用并发的策略
它拥有大幅度提高应用性能的潜力,但它也可能使代码复杂化,使其更难理解,并更容易出错。因此,只有应用中具有显著增益潜力的性能关键部分,才值得并发化。当然,如果性能收益的潜力仅次于设计清晰或关注点分离,可能也值得使用多线程设计。