程序、进程与线程

一、程序

  程序是存储在磁盘上, 包含可执行机器指令和数据的静态实体。 即进程或者任务是处于活动状态的计算机程序。

二、进程

  进程就是运行中的程序。 一个运行着的程序,可能有多个进程。进程在操作系统中执行特定的任务。

  1.分类:进程一般分为交互进程批处理进程守护进程三类。守护进程总是活跃的,一般是后台运行。

      守护进程一般是由系统在开机时通过脚本自动激活启动, 或者由超级用户root来启动。

  2.查看进程  :ps /  ps axu /  ps  -efl

  3.获取进程号:getpid

  4.创建子进程:fork

    创建一个子进程,失败返回-1;调用一次,返回两次 分别在父子进程中返回子进程的PID和0。 用返回值的不同,可以分别为父子进程编写不同的处理分支。  

 1 #include <stdio.h>
 2 #include <unistd.h>
 3
 4 int main ()
 5 {
 6     printf ("%u进程:我要调用fork()了...\n", getpid ());
 7
 8     pid_t pid = fork ();
 9     if (pid == -1)
10     {
11         perror ("fork");
12         return -1;
13     }
14
15     if (pid == 0)
16     {
17            printf ("%u进程:我是%u进程的子进程。\n", getpid (),
18            getppid ());
19            return 0;
20     }
21
22     printf ("%u进程:我是%u进程的父进程。\n", getpid (), pid);
23     sleep (1);
24     return 0;
25 }

    ① 子进程获得父进程数据段和堆栈段(包括I/O流缓冲区)的拷贝,但子进程共享父进程的代码段。

    ② 函数调用后父子进程各自继续运行 ,其先后顺序不确定, 某些实现可以保证子进程先被调度。

    ③ 共享文件表 :函数调用后,父进程的文件描述符表(进程级)也会被复制到子进程中,二者共享同一个文件表(内核级)。

    ④ 总进程数或实际用户ID所拥有的进程数,超过系统限制,该函数将失败。

    ⑤  一个进程如果希望创建自己的副本并执行同一份代码,或希望与另一个程序并发地运行,都可以使用该函数。

    ⑥ 孤儿进程:父进程先于子进程结束,子进程成为孤儿进程,同时被init进程收养,即成为init进程的子进程。

      僵尸进程:子进程先于父进程结束,但父进程没有回收子进程的相关资源,该子进程即成为僵尸进程。

  5.创建子进程:vfork

    该函数的功能与fork基本相同,二者的区别:

      ① 调用vfork创建子进程时并不复制父进程的地址空间 进程可以通过exec函数族,直接启动另一个进程替换自身,进而提高进程创建的效率。

      ② vfork调用之后,子进程先被调度

三、线程

  1.概念

    A、线程就是程序的执行路线,即进程内部的控制序列,或者说是进程的子任务。
    B、线程,轻量级,不拥有自己独立的内存资源,共享进程的代码区、数据区、堆区(注意没有栈区)、环境变量和命令行参数、文件描述符、信号处理函数、当前目录、用户ID和组ID等资源。
    C、线程拥有自己独立的栈,因此也有自己独立的局部变量。
    D、一个进程可以同时拥有多个线程,即同时被系统调度的多条执行路线,但至少要有一个主线程。

  2.特点

    A、线程是进程的一个实体,可作为系统独立调度和分派的基本单位。
    B、线程有不同的状态,系统提供了多种线程控制原语,如创建线程、销毁线程等等。
    C、线程不拥有自己的资源,只拥有从属于进程的全部资源,所有的资源分配都是面向进程的。
    D、一个进程中可以有多个线程并发地运行。它们可以执行相同的代码,也可以执行不同的代码。
    E、同一个进程的多个线程都在同一个地址空间内活动,因此相对于进程,线程的系统开销小,任务切换快。
    F、线程间的数据交换不需要依赖于类似IPC的特殊通信机制,简单而高效。
    G、每个线程拥有自己独立的线程ID、寄存器信息、函数栈、错误码和信号掩码。
    H、线程之间存在优先级的差异。

  3.创建线程 :pthread_create

  4.等待线程:pthread_join

  5.获取线程自身ID:pthread_self

  6.比较两个线程:pthread_equal

  7.终止线程:pthread_exit

  8.取消线程:pthread_cancel

总结:

  一、程序与进程的联系与区别

      ① 进程是动态的,而程序是静态的。
      ② 进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。
      ③ 1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。
      ④ 进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块(PCB)三部分组成。而程序是一组有序的指令集合。

  二、进程与线程的联系与区别

    联系:

      ① 线程是进程的最小执行和分配单元,不能独立运动,必须依赖于进程,这也就可以说众多的线程组成了进程。

      ② 资源分配给进程,同一进程的所有线程共享该进程的所有资源。

    区别:

      ① 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

      ② 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行

      ③ 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.

      ④ 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

      

原文地址:https://www.cnblogs.com/jiangyu0331/p/11652485.html

时间: 2024-09-30 00:02:59

程序、进程与线程的相关文章

转: 关于程序 进程 和 线程

我对于线程,进程的概念一直都是比较模糊,最近整理了一下.总结起来就是,线程是进程的一部分,进程是程序的一部分. 线程的引入:例如,有一个Web服务器要进程的方式并发地处理来自不同用户的网页访问请求的话,可以创建父进程和多个子进程的方式来 进行处理,但是创建一个进程要花费较大的系统开销和占用较多的资源.除外,这些不同的用户子进程在执行的时候涉及到进程上下文切换,上下文切换是一个复杂 的过程.所以,为了减少进程切换和创建的开销,提高执行效率和节省资源,人们在操作系统中引入了"线程(thread)&q

C# 获取进程或线程的相关信息

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace ConsoleApp { class ProcessDo { /// <summary> /// 获取进程相关信息 /// </summary> public static void GetProcessInfomation() { Proc

程序,进程,线程(需补充)

1.程序,进程,线程 程序:程序时完成特定任务的一系列指令集合. 进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发

程序、进程、线程的联系与区别

程序:一组指令的有效集合 进程:程序的执行就是进程.也可以把进程看成一个独立的程序,在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己.进程是资源分配的基本单位,也是调度运行的基本单位. 线程:线程被人们认为是轻量级的进程,它是进程中单独运行的一路程序.换句话说,就是一个进程可以包含多个线程,并且至少有一个主线程,同时同一进程的线程共享该进程的代码和数据.于此同时,每一个线程又都有自己的堆栈,这些堆栈对于线程来说是私有的.线程是处理机调度的基本单位. 那为什么要引入线程呢

linux学习之进程,线程和程序

                                                                                  程序.进程和线程的概念 1:程序和进程的差别 进程的出现最初是在UNIX下,用于表示多用户,多任务的操作系统环境下,应用程序在内存环境中基本执行单元的概念.进程是UNIX操作系统环境最基本的概念.是系统资源分配的最小单位.UNIX操作系统下的用户管理和资源分配等工作几乎都是操作系统通过对应用程序进程的控制实现的! 当使用c c++ j

System、应用程序进程的Binder线程池和Handler消息循环

首先看一张Android系统启动流程图: 一个进程最重要的两项指标一个是启动了Binder线程池,也就是能够进程Binder进程间通信了.还有一个是启动了Handler消息循环,能够使用了消息循环机制. 1.那么systemserver进程是什么时候实现上面两个机制的呢?见代码: 启动了Binder线程池.是子线程池. public static final void zygoteInit(String[] argv) throws ZygoteInit.MethodAndArgsCaller

程序、任务、进程和线程的联系与区别

概念: 程序(program)只是一组指令的有序集合. 任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动.一个任务既可以是一个进程,也可以是一个线程.简而言之,它指的是一系列共同达到某一目的的操作.例如,读取数据并将数据放入内存中.这个任务可以作为一个进程来实现,也可以作为一个线程(或作为一个中断任务)来实现. 进程(process)常常被定义为程序的执行.可以把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间.一个进程所拥有的数据和变量只属于它自己. 进

程序,进程,线程

   程序   进程  线程学习笔记   定义: 一 程序只是一组指令的有序集合. 二 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位; 三 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程; 一进程与线程区别与联系 (1) 划分尺度:线程更小,所以多线程程序并发性更高; (

【Linux】程序、进程和线程的区别

程序.进程和线程的区别 程序是一组指令及参数的集合,指令按照既定的逻辑控制计算机运行.进程则是运行着的程序,是操作系统执行的基本单位.线程则是为了节省资源而可以在同一个进程中共享资源的一个执行单位. ? 程序和进程的区别: ????C.C++.Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行.应用程序的运行状态称为进程.进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的资源管理实体.可以从

程序、进程、线程区别与联系

定义: 一 程序只是一组指令的有序集合. 二 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位; 三 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程; 一 进程与线程区别与联系 (1) 划分尺度:线程更小,所以多线程程序并发性更高; (2) 资源分配&处理器调度:进程是资源分