(1)21.1并发的多面性

并发令人困惑的原因:

        使用并发时需要解决的问题有多个,而实现并发的方式也有多种,并且在两者之间没有明显的映射关系。因此必须理解所有的这些问题和特例,以便有效的使用并发。

用并发解决问题大体上分为:“速度”和“设计可管理性”两种。

21.1.1更快的执行

        并发通常是提高运行在单处理器上的程序性能。

        运行在单处理器上的并发程序理论上是比所有顺序执行的程序开销大,因为有上下文的切换。

        使得这个问题便得不同的是阻塞。如果程序中的某个任务因为该程序控制范围外的某些条件(通常是I/O)而导致不执行,那么我就说这个任务或线程阻塞了,如果没有并发则整个程序要进行等待,直到外部条件发生变化,但是如果使用并发,那么当一个任务阻塞时,程序中的其它任务还可以执行,因此这个程序可以保持继续向前执行。事实上如果没有并发,单处理器使用并发就没有意义。

21.1.2改进代码设计

        在单CPU机器上使用多任务的程序在任意时刻仍旧只在执行一项工作,因此从理论上讲,肯定可以不用任何任务而编写相同的程序。但是,并发提供了一个重要的组织结构上的好处:你的程序设计可以极大的简化。某些类型的问题,例如仿真,没有并发的支持是很难解决的。

       Java的线程机制是抢占式的,这表示调度机制会周期性的中断线程,将上下文切换到另一线程,从而为每个线程都提供时间片,使得每个线程都会分配到数量合理的时间和驱动它的任务。在协作式系统中,每个任务都会自动的放弃控制,这要求程序员要有意识地在每个任务中插入某种类型的让步语句。协作式系统的优势是双重的:上下文切换的开销通常比抢占式系统要低廉的多,并且对可以同时执行的线程数量在理论上没有任何限制。

       并发需要付出代价,包含复杂性代价,但是这些代价与程序设计、资源负载均衡以及用户方便使用方面的改进相比,就显得微不足道。通常,线程使你能够创建更加松耦合的设计,否则,你的代码中各个部分都必须显式地关注那些通常可以由线程处理的任务。

 

 

 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值