Linux中进程与线程的概念以及区别

linux进程与线程的区别,早已成为IT界经常讨论但热度不减的话题。无论你是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了。对于一般的程序员,搞清楚二者的概念并在工作中学会运用是其思考的主要问题;对于资深工程师,如何在系统层面实现两种技术及其各自的性能和实现代价是其思考的主要问题。由此可见进程和线程在IT界的重要地位。

进程和线程是操作系统的基本概念,它们之间既有区别又有联系。从定义来看,它们比较抽象,很难理解。今天给大家打个比方,教大家用类比的方法去理解它,掌握它。其实,进程和线程的关系就好比是工厂车间和车间工人的关系,进程就像是一个工厂车间,线程就像是车间里的工人,每个工厂车间有一个入口和出口,这就好比执行进程程序的主函数;每个工厂车间都有自己的地址空间,这个空间里边可以包含不同工种的工人,这就好比一个进程的地址空间,包含文本区域,数字区域,堆栈;一个工厂车间可以容纳1个或n车间工人,进程和线程是一对一或一对多的关系,一个进程至少包含一个线程;车间里的工人共享车间里的空间,这象征着一个进程的内存空间是共享的,每个线程都可以使用共享内存;每个车间可以供不同的工人使用,但每个车间的大小不一,容纳人数都有上限,比如说每个厕所可以容纳1人,每个厨房可以容纳n人,但车间里的每个工人都有上厕所和吃饭的需求,那怎么解决这个问题呢?分批次进行!这就好比线程里的锁机制,当n个线程争夺同一资源时,就在这个资源上加把锁,当线程使用完毕,资源释放后才会供给后边的资源使用。有人可能会问,怎么确定使用该资源的先后顺序呢?按照优先级的高低来确定,优先级高的先使用,优先级低的后使用,同一级别按照先来后到的顺序使用。

通过这个故事我么可以看出,操作系统的设计可以归纳为3点:

(1)  以多进程形式,允许多个任务同时运行,也就是允许工厂里的多个车间同时工作;

(2)  以多线程形式,允许单个任务分成不同的部分运行,也就是允许同一车间可以有不同的工种完成不同的任务;

(3)  提供协调机制,一方面防止进程和线程之间产生冲突,另一方面进程和线程之间共享资源。

我们大致对进程和线程有一个基本的概念之后,接下来再来看下进程和线程之间的区别:

(1)  进程的执行过程是顺序执行的,虽然在执行过程中可能发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。就好比一次只能给一个车间供电的工厂,当一个车间A正在工作时,另外一个更高级的车间B也要开启工作时,那么此时车间A就要断电,但车间A的一切设施和位置都不会发生变化,等车间B断电后,车间A继续工作。这是进程宏观上的线性执行过程。而线程的改变只是改变了CPU执行过程,而没有发生进程所拥有资源的变化。除了CPU之外,计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。这就好比一个车间里的工人,他们可以互换位置,但他们还是在同一车间。

(2)  进程在执行过程中与线程还是有区别的。进程是执行中的程序,每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口,这就是程序中的主函数。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。就好比每个车间都有一个进口和出口,可以单独生产一件产品,但这依赖于车间里的工人协同工作才能完成。

(3)  通过进程和线程的执行过程我们可以看出,进程和线程是一对一或一对多的关系,一个进程至少包含一个线程,进程拥有一个完整的虚拟地址空间,它的空间大小是在设计它事就已经确定的,不随工人的多少,体积大小而改变,也就是说,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。

(4)  线程在很少做进程调度和切换的实时系统中可以有效地提高系统的执行效率,但并不是在所有计算机系统中都是适用的。这就好比同一车间工人总是做同一种产品的产能要比经常切换车间,切换工种,做不同产品的产能要高,因为他们更换车间,熟悉环境,熟悉生产流程都需要花时间。这也就是说线程的创建要比进程的创建开销要小的多。

(5)  从逻辑角度来看,多线程的意义在于一个应用程序中,他们可以实现应用程序的多个功能,但并不能实现一个完整的应用程序。就好比生产一个复杂的产品,每个车间只是生产该产品一个或多个零部件,一个完成的产品还是要靠整个工厂来完成。换言之,进程的调度和管理以及资源分配还是要靠操作系统来完成,这就是进程和线程的重要区别。

好了,今天就先分享这么多,《Linux就该这么学》这本书写的真的非常好,条理清晰,用通俗的语言阐明难懂的知识点,在这里分享给大家,有兴趣的同学可以去关注下啦!

原文地址:https://www.cnblogs.com/elsa-66/p/10262293.html

时间: 2024-10-02 11:06:49

Linux中进程与线程的概念以及区别的相关文章

13-Linux中进程与线程的概念以及区别

linux进程与线程的区别,早已成为IT界经常讨论但热度不减的话题.无论你是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了.对于一般的程序员,搞清楚二者的概念并在工作中学会运用是其思考的主要问题:对于资深工程师,如何在系统层面实现两种技术及其各自的性能和实现代价是其思考的主要问题.由此可见进程和线程在IT界的重要地位. 进程和线程是操作系统的基本概念,它们之间既有区别又有联系.从定义来看,它们比较抽象,很难理解.今天给大家打个比方,教大家用类比的方法去理解它,掌握它.其实,

进程和线程的概念,区别(理论知识)

进程和线程的概念,区别: 什么是线程????首先,计算机所有指令的执行都是CPU运算,CPU有规则,线程是操作系统能调度的最小单位线程可以简单理解为一堆指令做每一件事背后都是CPU在运算,例如画图.qq这些应用软件寄生在操作系统上画图和qq是独立的软件,各自分一块独立的内存空间硬盘--内存--CPU 慢--快为了安全,画图软件的内存不能访问qq的内存但是,qq或画图有一个整体的东西暴露给操作系统,这个整体的东西就是进程,里面包含对各种资源的调用例如内存的管理,网卡的调用等,对各种资源管理的集合称

全面理解进程和线程的概念、区别和联系

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 进程与线程的一个简单解释 在这个简单易懂的类比下,了解一下进程和线程的宏观概念: 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一个进程都有一个自己的地址空间,即进程空间或(虚空间).进程空间的大小 只与处理机的位数有关,一个 16 位长处理机的进程空间大小为 216

Linux中进程与线程及CPU使用率查询

一.进程查询: ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' 说明:PCPU是Cpu使用率,8核最多是800. 二.线程查询: cat /proc/13284/status 说明:13284是进程ID.

理解Linux的进程,线程,PID,LWP,TID,TGID

在Linux的top和ps命令中,默认看到最多的是pid (process ID),也许你也能看到lwp (thread ID)和tgid (thread group ID for the thread group leader)等等,而在Linux库函数和系统调用里也许你注意到了pthread id和tid等等.还有更多的ID,比如pgrp (process group ID), sid (session ID for the session leader)和 tpgid (tty proce

Linux 下进程与线程的基本概念

2019-10-01 关键字:进程.线程.信号量.互斥锁 什么是程序? 程序就是存放在磁盘上的指令和数据的有序集合,就是源代码编译产物. 它是静态的. 什么是进程? 进程就是操作系统为执行某个程序所分配的资源的总称.进程是程序的一次执行过程,因此它与程序不同,它是动态的.它的生命周期包括创建.调度.执行和消亡. 进程的内容主要包括以下三个部分: 1.正文段: 2.用户数据段: 3.系统数据段. 其中正文段与用户数据段两部分是从程序当中来的.而系统数据段则是操作系统分配的用来管理这个进程用的. 系

linux内核--进程与线程

http://blog.csdn.net/yusiguyuan/article/details/12154823 在<linux内核设计与实现>中第三章讲解了进程管理,在关于进程和线程的概念之间的区别还是由点模糊.书中说道:     进程就是处于执行期的程序.但进程并不仅仅局限于一段可执行程序代码.通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,持利器状态,一个或多个具有内存映射的内存地址空间以及一个或多个执行线程,当然还包括用来存放全局变量的数据段等.     然而每一个线

关于Java中进程和线程的详解

一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消.反映了一个程序在 一定的数据 集上运行的全部动态过程.通过进程控制块(PCB)唯一的标识某个进程.同时进程占据着相应的资源(例如包 括cpu的使用 ,轮转时间以及一些其它设备的权限).是系统进行资源分配和调度的一个独立单位. 程序和进程之间的主要区别在于: 状态         是否具有资源

Linux下进程与线程的区别及查询方法

在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢?一.深入理解进程和线程的区别 1)两者概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 线程是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位线程自己基本上不拥有系统资源,只拥有一点 在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线