zoukankan      html  css  js  c++  java
  • 线程和进程以及他们之间的分歧

    1.进程和线程

    1.1 概述:

    进程是具有一定独立功能的程序关于某个数据集合上的一次执行活动,进程是系统进行资源分配和调度的一个独立单位.

    线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立执行的基本单位.线程自己基本上不拥有系统资源,仅仅拥有一点在执行中不可缺少的资源(如程序计数器,一组寄存器和栈),可是它可与同属一个进程的其它的线程共享进程所拥有的所有资源.

    一个线程能够创建和撤销还有一个线程;同一个进程中的多个线程之间能够并发运行.

    相对进程而言。线程是一个更加接近于运行体的概念,它能够与同进程中的其它线程共享数据,但拥有自己的栈空间,拥有独立的运行序列。

    在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序执行效率和响应时间。

    1.2 差别:

    进程和线程的主要区别在于它们是不同的操作系统资源管理方式。

    进程有独立的地址空间,一个进程崩溃后。在保护模式下不会对其他进程产生影响。而线程仅仅是一个进程中的不同运行路径。

    线程有自己的堆栈和局部变量。但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

    但对于一些要求同一时候进行而且又要共享某些变量的并发操作。仅仅能用线程。不能用进程。

    1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

    2) 线程的划分尺度小于进程,使得多线程程序的并发性高。

    3) 另外,进程在执行过程中拥有独立的内存单元。而多个线程共享内存,从而极大地提高了程序的执行效率。

    4) 线程在运行过程中与进程还是有差别的。每一个独立的线程有一个程序运行的入口、顺序运行序列和程序的出口。

    可是线程不可以独立运行,必须依存在应用程序中,由应用程序提供多个线程运行控制。

    5) 从逻辑角度来看。多线程的意义在于一个应用程序中,有多个运行部分能够同一时候运行。

    但操作系统并没有将多个线程看做多个独立的应用。来实现进程的调度和管理以及资源分配。

    这就是进程和线程的重要差别。

    1.3 优缺点:

    线程和进程在使用上各有优缺点:线程执行开销小。但不利于资源的管理和保护;而进程正相反。同一时候,线程适合于在SMP机器上执行。而进程则能够跨机器迁移。

    2.多进程。多线程

    2.1 概述:

    进程就是一个程序执行的时候被CPU抽象出来的。一个程序执行后被抽象为一个进程。可是线程是从一个进程里面切割出来的,因为CPU处理进程的时候是採用时间片轮转的方式,所以要把一个大个进程给切割成多个线程,比如:网际快车中文件分成100部分 10个线程 文件就被分成了10份来同一时候下载 1-10 占一个线程 11-20占一个线程,依次类推,线程越多,文件就被分的越多,同一时候下载 当然速度也就越快

    进程是程序在计算机上的一次执行活动。

    当你执行一个程序。你就启动了一个进程。显然,程序仅仅是一组指令的有序集合,它本身没有不论什么执行的含义,仅仅是一个静态实体。而进程则不同,它是程序在某个数据集上的执行,是一个动态实体。它因创建而产生,因调度而执行。因等待资源或事件而被处于等待状态,因完毕任务而被撤消。反映了一个程序在一定的数据集上执行的所有动态过程。进程是操作系统分配资源的单位。

    Windows下,进程又被细化为线程,也就是一个进程下有多个能独立执行的更小的单位。线程(Thread)是进程的一个实体。是CPU调度和分派的基本单位。线程不可以独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

    线程和进程的关系是:线程是属于进程的,线程执行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。

    线程可与属于同一进程的其他线程共享进程所拥有的所有资源,可是其本身基本上不拥有系统资源。仅仅拥有一点在执行中不可缺少的信息(如程序计数器、一组寄存器和栈)。

    在同一个时间里,同一个计算机系统中假设同意两个或两个以上的进程处于执行状态,这便是多任务。

    现代的操作系统差点儿都是多任务操作系统。能够同一时候管理多个进程的执行。

     多任务带来的优点是明显的。比方你能够边听mp3边上网,与此同一时候甚至能够将下载的文档打印出来。而这些任务之间丝毫不会相互干扰。那么这里就涉及到并行的问题,俗话说。一心不能二用,这对计算机也一样,原则上一个CPU仅仅能分配给一个进程,以便执行这个进程。我们通常使用的计算机中仅仅有一个CPU,也就是说仅仅有一颗心。要让它一心多用。同一时候执行多个进程。就必须使用并发技术。实现并发技术相当复杂,最easy理解的是“时间片轮转进程调度算法”。它的思想简介例如以下:在操作系统的管理下。全部正在执行的进程轮流使用CPU,每一个进程同意占用CPU的时间很短(比方10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象全部的进程都在不间断地执行一样。

    但实际上在不论什么一个时间内有且仅有一个进程占有CPU。

    假设一台计算机有多个CPU,情况就不同了。假设进程数小于CPU数,则不同的进程能够分配给不同的CPU来执行。这样,多个进程就是真正同一时候执行的,这便是并行。但假设进程数大于CPU数。则仍然须要使用并发技术。

    Windows中,进行CPU分配是以线程为单位的。一个进程可能由多个线程组成,这时情况更加复杂,但简单地说,有例如以下关系:

    总线程数<= CPU数量:并行执行

    总线程数> CPU数量:并发执行

    并行执行的效率显然高于并发执行。所以在多CPU的计算机中,多任务的效率比較高。

    可是,假设在多CPU计算机中仅仅执行一个进程(线程),就不能发挥多CPU的优势。

     多任务操作系统(如Windows)的基本原理是:操作系统将CPU的时间片分配给多个线程,每一个线程在操作系统指定的时间片内完毕(注意,这里的多个线程是分属于不同进程的).操作系统不断的从一个线程的运行切换到还有一个线程的运行,如此往复,宏观上看来,就好像是多个线程在一起运行.因为这多个线程分属于不同的进程,因此在我们看来,就好像是多个进程在同一时候运行,这样就实现了多任务.

     2.2 分类

    依据进程与线程的设置。操作系统大致分为例如以下类型:

    (1) 单进程、单线程。MS-DOS大致是这样的操作系统;

    (2) 多进程、单线程。多数UNIX(及类UNIX的LINUX)是这样的操作系统;

    (3) 多进程、多线程,Win32(Windows NT/2000/XP等)、Solaris 2.x和OS/2都是这样的操作系统;

    (4) 单进程、多线程。VxWorks是这样的操作系统。

    2.3 引入线程带来的主要优点:

    (1) 在进程内创建、终止线程比创建、终止进程要快;

    (2) 同一进程内的线流程之间的切换速度比进程间切换,用户级线程之间切换尤其。

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Android系统进程Zygote启动过程的源代码分析
    Android系统默认Home应用程序(Launcher)的启动过程源代码分析
    Android应用程序安装过程源代码分析
    Android应用程序进程启动过程的源代码分析
    Android应用程序绑定服务(bindService)的过程源代码分析
    Android应用程序发送广播(sendBroadcast)的过程分析
    Android应用程序注册广播接收器(registerReceiver)的过程分析
    Android系统中的广播(Broadcast)机制简要介绍和学习计划
    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:
    解开Android应用程序组件Activity的"singleTask"之谜
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4845567.html
Copyright © 2011-2022 走看看