并发相关知识

并发的多面性
并发编程令人困惑的一个主要原因是:使用并发时需要解决的问题有多个,而实现并发的方式也有多种,并且在这两者之前没有明显的映射关系,因此你必须理解所有这些问题和特例,以便有效地使用并发。
用并发解决的问题大体上可以分为“速度”和设计可管理性两种·
更快的执行
速度的提高是以多核处理器的形式而不是更快的芯片的形式出现的。为了使程序运行得更快,
你必须学习如何利用这些额外的处理器,而这正是并发赋予你的能力。
如果你有一台多处理器的激情,那么就可以在这些处理器之间分布多个任务,从而可以极大地
提高吞吐量。这是使用强有力的多处理器Web服务器的常见情况,在为每个请求分配一个线程的程序中,它可以将大量的用户请求分布到多个CPU上。
但是,并发通常是提高运行在单个处理器上的程序的性能。
在单处理器上运行的并发程序开销确实应该比该程序的所有部分都顺序执行的开销大,因为其中增加了所谓上下文切换的代价(从一个任务切换到另一个任务);表面上看,将程序员的所有部分当做单个的任务运行好像是开销更小一点,并且可以节省上下文切换的代价。
但是使这个问题有些不同的是阻塞。 如果程序中的某些任务因为该程序控制范围之外的某些条件而导致不能继续执行,那么我们就说这个任务或者线程阻塞了。如果没有并发,则整个程序都将停止下来,直至外部条件发生变化。但是,如果使用并发来编写程序,那么当一个任务阻塞时,程序中的其他任务还可以继续执行,因此这个程序可以保持继续向前执行,事实上,从性能的角度看,如果没有任务会阻塞,那么在单处理器机器上使用并发就没有任何意义。
实现并发最直接的方式是在操作系统级别使用进程。进程是运行在它自己的地址空间内的自包容的程序。多任务操作系统就可以通过周期性地将CPU从一个进程切换到另一个进程,来实现同时运行多个进程。
JAV 所使用的这种并发系统会共享诸如内存和IO这样的资源,编写多线程程序最基本的困难在于在协调不同线程驱动的任务之间对这些资源的使用,以使得这些资源不会同时被多任务访问。
基本的线程机制
线程模型为编程带来了便利,它简化了在单一程序中同时交织在一起的多个操作的处理。在使用线程时,CPU将轮流给每个任务分配其占用时间。每个任务都觉得自己在一直占用CPU,单事实上CPU时间是划分成片段分配给了所有的任务。线程的一大好处是可以使你从这个层次抽身出来即代码不必知道它是运行在具有一个函数多个CPU的机器上。所以,使用线程机制时一种建立透明的,可扩展的程序的方法,如果程序运行得太慢,为机器增添一个CPU就能很容易地加快程序的运行速度。多任务和多任务往往是使用多处理系统最合理方式。

你可能感兴趣的:(服务器,java,运维)