D56.1.0 《并发编程实战》读书笔记01

01 为什么使用并发?

为了划分关注点而使用并发

通过将相关代码放在一起并将无关的代码分开,这种方法可以是你的程序更容易理解和测试,从而减少出错的可能性。你可以使用并发来分隔不同的功能区域,即使在这些不同功能区域的操作需要在同一时刻发生的情况下。如果不显示地使用并发,你要么被迫编写任务切换框架,要么在操作中主动调用不相关的代码。

例如为台式计算机提供的DVD播放程序。这样一个程序基本上具备两套智能:从光盘中读取数据,解码图像和声音,从而实现DVD的无错播放;它还要接受来自用户的输入,当用户单击暂停或返回菜单甚至退出按键的情况。在单个线程中,应用程序须在回放期间定期检查用户的输入,于是将DVD回放代码不再需要如此紧密地交织在一起。一个线程可以处理用户界面,另一个处理DVD回放,它们之间会有交互,例如用户点击暂停,但实现这些交互直接与眼前的任务有关。

为了性能而使用并发

多核处理器的发展,计算机的计算能力日益增长。如果软件要利用日益增长的计算能力,它必须设计为并发运行多个任务。

有两种方式为了性能使用并发。首先是讲一个单任务分成几部分且各自不行运行,从而降低总运行时间,这就是任务并行。第二种方法是使用可用的并行方式来解决更大的问题。

02 什么时候不适用并发?

基本上,不适用并发的唯一原因就是在收益比不上成本的时候。使用并发的代码在很多情况下难以理解,因此编写和维护的多线程代码就有直接的脑力成本,同时额外的复杂性也可能导致更多的错误。除非潜在的性能增益足够大或关注点分离得足够清晰,能抵消确保其正确所需的额外的开发时间以及与维护多线程代码相关的额外成本,否则不要使用并发。

性能增益可能不会如逾期的那么大。启动线程存在固有的开销,因为操作系统必须分配相关的内核资源和堆栈空间,然后将新线程加入调度器中,多有这一切都要占用时间。

此外,线程是有限的资源。如果让太多的线程同时运行,则会消耗操作系统资源,并且使得操作系统整体上运行得更慢。不仅如此,运行太多的线程会耗尽进程的可用内存或者地址空间,因为每个线程都需要一个独立的堆栈空间。

最后,运行的线程越多,操作系统就需要做越多的上下文切换。每个切换都需要耗费本可以花在有价值工作上的时间,所以某些时候,增加一个额外的线程实际上会降低而不是提高应用程序的整体性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值