编程问题中大部分都是能够经过顺序编程来解决。然而对于某些问题,若是可以并行地执行程序中的多个部分,则会变得很是方便甚至颇有必要,java
由于这些部分要么看起来在并发地执行,要么在多处理器环境下执行。(并发跟并行是两个概念)web
1、什么是并发数据库
2、关于javaweb系统上的并发编程
web系统是最多见的java应用系统之一,而基本的web库类、servlet具备天生的多线程性,由于web服务器常常包含多个处理器,而并发是充分利用这些处理器的理想方式。服务器
即使是像servlet这样看起来很简单的状况,你也必须理解并发问题,从而正确地使用它们。多线程
3、并发多面性并发
并发编程使人疑惑的一个主要缘由是:使用并发时须要解决的问题有多个,而实现并发的方式也有多种,而且在这二者之间没有明显的映射关系(并且一般只具备模糊的界线)。负载均衡
用并发解决的问题大致上能够分为“速度”和“设计可管理性”两种。性能
一、更快的执行操作系统
若是你想要一个程序运行的更快,那么能够将其断开为多个片断,在单独的处理器上运行每一个片断。可是并发一般是提升运行在单个处理器上的程序和性能。
在单个处理器上运行的并发程序开销确实应该比该程序的全部部分都顺序执行的开销大,由于其中增长了所谓的上下文切换的代价(从一个任务切换到另外一个任务)。
然而阻塞使这个问题发生了变化,若是某个任务或者线程阻塞了,致使不能继续执行,那么咱们能够说这个任务或者线程阻塞了。若是没有并发,那么整个程序都将中止下来。
并发在此时就发挥它的做用,当一个任务阻塞的时候,程序中其余任务还能够继续执行。(若是没有任务阻塞,那么单处理器机器上使用并发就没有任何意义。)
二、改进代码设计
在单cpu机器上使用多任务的程序在任意时刻仍旧只在执行一项工做,所以从理论上讲,确定能够不用任何任务而编写出相同的程序。可是, 并发提供了一个重要的组织结构上的好处:你的程序设计能够极大地简化。
某些类型的问题,例如仿真,没有并发的支持很难解决。
解决这个问题的典型方式是使用协做多线程。java的线程机制是抢占式,这表示调度机制会周期性地中断线程,将上下文切换到另外一个进程,从而为每一个线程都提供时间片,使得每一个线程都会分配到数量合理的时间去驱动它的任务。
在协做式系统中,每一个任务都会自动地放弃控制,这要求程序要有意识地在每一个任务中插入某个类型的让步语句。
协做式系统的优点是双重的:上下文切换的开销一般比抢占式系统要低廉许多,并且对能够同时执行线程数量在理论上是没有限制。
并发须要付出代价,包含复杂性你们,可是这些代价与在程序设计、资源负载均衡以及用户方便使用方面相比,就显得微不足道了。一般,线程是你可以建立更加松散耦合的设计,
不然,你的代码中各个部分都必须显式地关注那些一般能够由线程来处理的任务。
最后:
JAVA的线程能够在多个CPU上运行么?
"在具备多个处理器的机器上,每个处理器运行一个线程,能够有多个线程并行运行。固然,若是线程的数目多于处理器的数目,调度器依然采用时间片机制"。