首页 > 编程知识 正文

线程进程和协程(进程和线程的通俗理解)

时间:2023-05-03 17:12:06 阅读:102299 作者:1149

00-1010 Process是程序在计算机中数据集上的运行活动,是系统中资源分配和调度的基本单位,也是操作系统结构的基础。在面向过程设计的早期计算机结构中,过程是程序的基本执行实体;在面向线程设计的当代计算机体系结构中,进程是线程的容器。它是对指令、数据及其组织形式的描述,过程是程序的实体。

进程是关于数据集的独立程序的运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个主动的实体。它不仅是程序的代码,也是当前的活动,由程序计数器的值和处理寄存器的内容来表示。

过程的概念主要有两点:第一,过程是一个实体。每个进程都有自己的地址空间,一般包括文本区、数据区和栈区。由文本存储处理器执行的代码;进程执行期间使用的数据存储变量和动态分配的内存;堆栈存储活动过程调用的指令和局部变量。第二,过程是一个“执行中的程序”。程序是一个无生命的实体。只有当处理器赋予程序生命(由操作系统执行)时,它才能成为一个活动的实体。我们称之为过程。

00-1010线程,有时称为轻量级进程(LWP),是程序执行流程的最小单元。标准线程由线程标识、当前指令指针、寄存器组和堆栈组成。此外,线程是进程中的一个实体,是由系统独立调度的基本单元。一个线程不拥有系统资源,只拥有一点点运行中的必需资源,但可以与属于同一个进程的其他线程共享该进程所拥有的所有资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程可以并发执行。由于线程之间的相互制约,线程在运行中是间歇性的。线程也有三种基本状态:就绪、阻塞和运行。就绪状态表示线程具备运行的所有条件,可以逻辑运行,正在等待处理器;运行状态表示线程占用处理器正在运行;阻塞状态意味着线程正在等待逻辑上不可执行的事件(如信号量)。每个程序至少有一个线程。如果一个程序只有一个线程,那就是程序本身。

是线程程序中的单个顺序控制流。进程中相对独立且可调度的执行单元是系统独立调度和调度CPU的基本单元,是指运行程序的调度单元。在一个程序中运行多个线程来同时完成不同的任务被称为多线程。

是线程程序中的单个顺序控制流。进程中相对独立且可调度的执行单元是系统独立调度和调度CPU的基本单元,是指运行程序的调度单元。在一个程序中运行多个线程来同时完成不同的任务被称为多线程。

00-1010一个程序可以包含多个语料库,这可以与一个包含多个线程的进程进行比较,所以让我们比较语料库和线程。我们知道多线程是相对独立的,有自己的上下文,切换由系统控制。协同过程相对独立,有自己的语境,但其切换是由自身控制的,从当前协同过程切换到其他协同过程是由当前协同过程控制的。

1、进程

Daemon()程序是一个一直运行的服务器程序,也称为Daemon。通常在系统后台运行,没有控制终端,也不与前台交互。守护程序通常用作系统服务。守护进程是一个长时间运行的进程,通常在系统启动后运行,在系统关闭时结束。一般来说,Daemon程序在后台运行是因为它没有控制终端,无法与前台用户进行交互。守护程序通常用作服务程序,等待客户端程序与之通信。我们也称运行中的守护进程为守护进程。

所谓守护线程,是指程序运行时,在后台提供通用服务的线程。比如垃圾收集线程就是一个非常称职的守护者,这个线程并不是程序不可或缺的一部分。因此,当所有非守护线程完成时,程序将被终止,进程中的所有守护线程都将被杀死。相反,只要任何非守护线程仍在运行,程序就不会终止。

用户线程和守护线程之间几乎没有区别。唯一的区别在于虚拟机的离开:如果所有的用户线程都退出了,那么只有守护线程存在,虚拟机退出。因为没有守护,守护线程没有工作可做,没有必要继续运行程序。

2、线程

进程是资源分配的最小单位,线程是CPU调度的最小单位。线程和进程的区别在于子进程和父进程有不同的代码和数据空间,而多个线程共享数据空间,每个线程都有自己的执行栈和程序计数器作为其执行上下文。多线程主要是节省CPU时间,充分利用,具体看情况。线程的运行需要使用计算机的内存资源和CPU。

多进程:进程是计算机上程序的执行活动。Xldtd运行一个程序,你开始一个过程。显然,程序是死的(静态的),过程是活的(动态的)。流程可以分为系统流程和用户流程。用来完成操作系统各种功能的所有进程都是系统进程,它们是运行状态下的操作系统本身。用户启动的所有进程都是用户进程。进程是操作系统分配资源的单位。进程被细分为线程,也就是说,有几个较小的单元可以在一个进程下独立运行。同时,如果允许两个或多个进程在同一计算机系统中运行,这就是多任务处理。几乎所有现代操作系统都是多任务操作系统,可以同时管理多个进程的运行。多任务处理的好处显而易见。例如,你可以一边听mp3一边上网,同时,你甚至可以打印出下载的文档,这些任务之间没有任何干扰。然后就是俗话说的排比问题。

,一心不能二用,这对计算机也一样,原则上一个CPU只能分配给一个进程,以便运行这个进程。我们通常使用的计算机中只有一个CPU,也就 是说只有一颗心,要让它一心多用,同时运行多个进程,就必须使用并发技术。实现并发技术相当复杂,最容易理解的是“时间片轮转进程调度算法”,它的思想简 单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来 CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。 如果一台计算机有多个CPU,情况就不同了,如果进程数小于CPU数,则不同的进程可以分配给不同的CPU来运行,这样,多个进程就是真正同时运行的,这 便是并行。但如果进程数大于CPU数,则仍然需要使用并发技术。 进行CPU分配是以线程为单位的,一个进程可能由多个线程组成,这时情况更加复杂,但简单地说,有如下关系:

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

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

并行运行的效率显然高于并发运行,所以在多CPU的计算机中,多任务的效率比较高。但是,如果在多CPU计算机中只运行一个进程(线程),就不 能发挥多CPU的优势。 这里涉及到多任务操作系统的问题,多任务操作系统(如Windows)的基本原理是:操作系统将CPU的时间片分配给多个线程,每个线程在操作系统指定的 时间片内完成(注意,这里的多个线程是分属于不同进程的).操作系统不断的从一个线程的执行切换到另一个线程的执行,如此往复,宏观上看来,就好像是多个 线程在一起执行.由于这多个线程分属于不同的进程,因此在我们看来,就好像是多个进程在同时执行,这样就实现了多任务

多线程:在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题, 再返回主进程。可以通过多种途径达到这个目的。最开始的时候,那些掌握机器低级语言的程序员编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断实 现的。尽管这是一种有用的方法,但编出的程序很难移植,由此造成了另一类的代价高昂问题。中断对那些实时性很强的任务来说是很有必要的。但对于其他许多问 题,只要求将问题划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求。

最开始,线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正 进入“并行运算”状态。从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器。程序在逻辑意义上被分割为数个 线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。根据前面的论述,大家可能感觉线程处理非常简单。但必须注意一个问 题:共享资源!如果有多个线程同时运行,而且它们试图访问相同的资源,就会遇到一个问题。举个例子来说,两个线程不能将信息同时发送给一台打印机。为解决 这个问题,对那些可共享的资源来说(比如打印机),它们在使用期间必须进入锁定状态。所以一个线程可将资源锁定,在完成了它的任务后,再解开(释放)这个 锁,使其他线程可以接着使用同样的资源。

多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

一个采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做 出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据 传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。

进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位。每个进程都有自己的一部分 独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。这些进程可以运行在同一计算机上或网络连接的不同计算 机上。

进程间通信技术包括消息传递、同步、共享内存和远程过程调用。IPC是一种标准的Unix通信机制。

使用IPC 的理由:

信息共享

加速;

模块化;

方便; 以及

私有权分离.

主要的 IPC 方法

方法 提供方(操作系统或其他环境)

文件 多数操作系统

信号 多数操作系统

Socket 多数操作系统

消息队列(en:Message queue) 多数操作系统

管道(en:Pipe) 所有的 POSIX systems, Windows.

具名管道(en:Named Pipe) 所有的 POSIX 系统, Windows.

信号量(en:Semaphore) 所有的 POSIX 系统, Windows.

共享内存 所有的 POSIX 系统, Windows.

Message passing(en:Message passing) 用于 MPI规范,Java RMI, CORBA, MSMQ, MailSlot 以及其他.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。