java并发编程基础(一)

什么是并发

并发是一种可以并行运行多个程序或并行运行一个程序中多个部分的能力。若是程序中一个耗时的任务能以异步或并行的方式运行,那么整个程序的吞吐量和可交互性将大大改善。现代的PC都有多个CPU或一个CPU中有多个核。是否能合理运用多核的能力将成为一个大规模应用程序的关键。web

并发的目的

在不启动多线程的状况下让程序执行的更快。若是以启动多线程的方式让程序运行的更快就面临如下几个问题:算法

  1. 上下文切换:数据库

    有时也称做进程切换或者任务切换,是指CPU 从一个进程或线程切换到另外一个进程或线程。即便是单核处理器也支持多线程执行代码,因此须要CPU经过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务,可是在切换前会保存上一个任务的状态,以便在下次回到这个任务时,能够再加载到这个状态。就如同咱们同时阅读几本书,在来回切换书本的同时咱们须要记住每本书当前读到的页码。在程序中,上下文切换过程当中的“页码”信息是保存在进程控制块 (PCB)中的。PCB还常常被称做“切换桢”(switchframe)。“页码”信息会一直保存到CPU的内存中,直到他们被再次使用。编程

  2. 死锁 :多线程

    指两个或两个以上的进程在执行过程当中,因为竞争资源或者因为彼此通讯而形成的一种阻塞的现象。避免死锁的几个主要方式:(1)避免一个线程同时获取多个锁 (2)避免一个线程在锁内同时占用多个资源。尽可能保证每一个锁只占用一个资源。 (3)使用定时所lock.tryLock(timeout)来代替内部锁机制。(4)对于数据库锁,加锁和解锁必须在一个数据库链接里,不然会形成解锁失败。
    并发

  3. 硬件和软件的资源限制 :异步

    硬件限制有宽带的上传/下载速度、硬盘读写速度和CPU处理速度;软件有数据库链接数和socket连接数。由于在并发编程中,将代码执行速度加快的原则是将代码中串行执行部分变成并发执行,可是若是由于受资源限制缘由,增长了上下文切换和资源调度时间,就会使程序执行变得更慢。socket

    对于硬件资源限制,能够考虑使用集群并行执行程序,在多机上运行。对于软件资源的限制,能够考虑使用资源池将资源复用。好比使用链接池将数据库和Socket链接复用,或者在调用对方webService接口,只创建一个连接。
    spa

相关文章
相关标签/搜索