1. 多进程编程
实现并发最直接的方式是在操做系统级别使用进程,进程是运行在它本身的地址空间内的自包容的程序。多任务操做系统能够经过周期性地将CPU从一个进程切换到另外一个进程,来实现同时运行多个进程。 尽管对于一个CPU而言,它在某个时间点只能运行一个进程,但CPU能够在多个进程之间进行轮换执行,而且CPU的切换速度极高,使咱们没法感知其切换的过程,就好像有多个进程在同时执行。浏览器
几乎全部的操做系统都支持进程的概念,全部运行中的任务一般对应一个进程(Process)。当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程当中的程序,而且具备必定的独立功能,进程是系统进行资源分配和调度的一个独立单位。通常而言,进程包含以下3个特征:服务器
2 多线程多线程
2.1 多线程概述并发
多线程则扩展了多进程的概念,用于实现并发。使得同一个进程中也能够同时并发处理多个任务。线程(Thread)也被称做轻量级进程(Lightweight Process)。线程是进程的执行单元,就像进程在操做系统中的地位同样,线程在程序中是独立的、并发的执行流。当进程被初始化后,主线程就被建立了。对于绝大多数的应用程序来讲,一般仅要求有一个主线程,但也能够在该进程内建立多条顺序执行流,这些顺序执行流就是线程,每一个线程也是互相独立的。性能
线程是进程的组成部分,一个进程能够拥有多个线程,一个线程必须有一个父进程。线程能够拥有本身的堆栈、本身的程序计数器和本身的局部变量,但不拥有系统资源,它与父进程的其余线程共享该进程所拥有的所有资源。由于多个线程共享父进程里的所有资源,所以编程更加方便;但必须更加当心,咱们必须确保线程不会妨碍同一进程里的其余线程。操作系统
2.2 多线程机制线程
线程模型为编程带来了便利,它简化了在单一程序中同时交织在一块儿的多个操做的处理。在使用线程时,CPU将轮流给每一个任务分配其占用时间。每一个任务都以为本身在一直占用CPU,但事实上CPU时间是划分红片断分配给了全部的任务。线程的一大好处是可使你从这个层次抽身出来,即代码没必要知道它是运行在具备一个仍是多个CPU的机器上。因此,使用线程机制是一种创建透明的、可扩展的程序的方法,若是程序行得太慢,为机器增添一个CPU就能很容易地加快程序的运行速度。多任务和多线程每每是使用多处理器系统的最合理方式。生命周期
2.3 多线程调度进程
线程能够完成必定的任务,能够与其余线程共享父进程中的共享变量及部分环境,相互之间协同来完成进程所要完成的任务。线程是独立运行的,它并不知道进程中是否还有其余线程存在,线程的执行是抢占式的,也就是说,当前运行的线程在任什么时候候均可能被挂起,以便另一个线程能够运行。
一个线程能够建立和撤销另外一个线程,同一个进程中的多个线程之间能够并发执行。从逻辑角度来看,多线程存在于一个应用程序中,让一个应用程序中能够有多个执行部分同时执行,但操做系统无须将多个线程看做多个独立的应用,对多线程实现调度和管理以及资源分配。线程的调度和管理由进程自己负责完成。
概括起采能够这样说:操做系统能够同时执行多个任务,每一个任务就是进程;进程能够同时执行多个任务,每一个任务就是线程。简而言之,一个程序运行后至少有一个进程,一个进程里能够包含多个线程,但至少要包含一个线程。
2.4 多线程的优点
线程在程序中是独立的、并发的执行流,与分隔的进程相比,进程中线程之间的隔离程度要小
它们共享内存、文件句柄和其余每一个进程应有的状态。由于线程的划分尺度小于进程,使得多线程程序的并发性高。进程在执行过程当中拥有独立的内存单元,而多个线程共享内存,从而极大地提升了程序的运行效率
线程比进程具备更高的性能,这是因为同一个进程中的线程都有共性----多个线程共享同一个进程虚拟空间。线程共享的环境包括进程代码段、进程的公有数据等。利用这些共享的数据,线程很容易实现相互之间的通讯
当操做系统建立一个进程时,必须为该进程分配独立的内存空间,并分配大量的相关资源;但建立一个线程则简单得多,所以使用多线程来实现并发比使用多进程实现并发的性能要高得多
在实际应用中,多线程是很是有用的,一个浏览器必须能同时下载多个图片;一个Web服务器必须能同时响应多个用户请求;Java虚拟机自己就在后台提供了一个超级线程来进行垃圾回收;图形用户界面(GUI)应用也须要启动单独的线程从主机环境收集用户界面事件……总之,多线程在实际编程中的应用是很是普遍的.