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就该这么学》这本书写的真的非常好,条理清晰,用通俗的语言阐明难懂的知识点,在这里分享给大家,有兴趣的同学可以去关注下啦!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    linux进程与线程的区别,早已成为IT界经常讨论但热度不减的话题.无论你是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了.对于一般的程序员,搞清楚二者的概念并在工作中学会运用是 ...

  2. Java多线程1:进程与线程的概念、区别和联系

    一.进程的的概念 引用线程之前进程的概念: 进程是表示资源分配的基本单位,也是调度运行的基本单位.例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括内存空间.磁盘空间.I/O设备等.然 ...

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

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

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

    在Linux的top和ps命令中,默认看到最多的是pid (process ID),也许你也能看到lwp (thread ID)和tgid (thread group ID for the threa ...

  5. 深入理解 Linux的进程,线程,PID,LWP,TID,TGID

    转载:https://www.linuxidc.com/Linux/2019-03/157819.htm 在Linux的top和ps命令中,默认看到最多的是pid (process ID),也许你也能 ...

  6. linux内核--进程与线程

    http://blog.csdn.net/yusiguyuan/article/details/12154823 在<linux内核设计与实现>中第三章讲解了进程管理,在关于进程和线程的概 ...

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

    一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而 ...

  8. [转载]了解Linux的进程与线程

    本文转自Tim Yang的博客http://timyang.net/linux/linux-process/ .对于理解Linux的进程与线程非常有帮助.支持原创.尊重原创,分享知识! 上周碰到部署在 ...

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

    在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢?一.深入理解进程和线程的区别 1)两者概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进 ...

随机推荐

  1. [android] 手机卫士设备管理权限锁屏

    设备管理员 Device Admin 获取DevicePolicyManager对象,通过getSystemService(DEVICE_POLICY_MANAGER),设备策略管理器 调用Devic ...

  2. JQuery实现省市区的三级联动

    JQuery实现省市区的三级联动 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "h ...

  3. WCF Service 转换为Web Service 中字段属性

    1.新建WCF服务,服务中包含对象 2.部署WCF服务,并将其转换为应用程序 3.通过添加服务引用,使用WCF服务 4.调用对应的对象时需要对应的值设置为True. 参考:https://cloud. ...

  4. ViewModel处理View相关事件的多种方式(非技术贴,仅学习总结)

    众所周知,在UWP中,微软为我们提供了一种新的绑定方式:x:bind,它是基于编译时的绑定.在性能方面,运行时绑定Binding与它相比还是有些逊色的.因此针对一些确定的.不需要变更的数据,我们完全有 ...

  5. 站在DevOps肩膀上的TestOps(一)

    一十一 发表于 2018-03-14 15:50:03 TestOps   摘要: DevOps团队的职责是“无摩擦发展”. 这是对“速度需求”驱动的发展理念的一种渴望,以及有意识地去除从概念到客户的 ...

  6. 站在DevOps肩膀上的TestOps(二)

    一十一 发表于 2018-03-14 16:40:22 TestOps   摘要: TestOps模型旨在将整个团队的注意力集中在质量上,因此TestOps确实需要无缝且可靠. 一个简单的例子是任何测 ...

  7. layui switch 开关监听 弹出确定状态转换

    不废话,直接上图: 原始状态:   点击确定: 点击取消或者X 代码: <!doctype html> <html lang="en"> <head& ...

  8. MySQL安装的挫折之路

    由于对MySQL卸载的不干净,mysql 的MySQL Connector Net/xxx无法卸载,后期重装无法成功.所以只能采用zip 安装https://www.cnblogs.com/Micha ...

  9. 移动端不利用HTML5和echarts开发一样可以实现大数据展示及炫酷统计系统(产品技术综合)

    一.由于项目需要进行手机看板展示设计及开发展示效果图如下:

  10. synchronized的锁问题

    有一个类A,提供了三个方法.分别是静态同步方法,非静态同步方法,含有静态代码块的方法 1 class A{ 2 public static synchronized void print1(){ 3 ...