精华内容
下载资源
问答
  • 线程和进程的关系
    万次阅读
    2022-06-13 11:19:37

    突然想聊一下自己对进程和线程的初步理解

    进程:

    进程是操作系统分配资源的基本单位

    进程 就是操作系统 为应用程序的执行 分配的资源

    进程就是一个容器,操作系统通过运行进程容器中的线程,来完成应用程序进程中的各项功能

    举个例子:

    比如桌面图标双击后,这个应用程序就开始运行了

    注意:

    一个进程的创建需要消耗计算机的资源,销毁意味着释放资源

    当很多个进程同时执行时,计算机资源消耗大,执行效率低

    线程:

    线程是操作系统执行和调度的最小单位

    线程依赖于进程而存在,即线程和进程是依赖关系

    每个进程都至少有一个线程,这个线程就是主线程

    举个例子:

    听歌软件运行后,开始播放音乐这个功能就是一个线程,也就是播放音乐线程

    下载音乐又是一个线程,这时候,这个听歌软件就对应一个进程,两个线程,

    这样运行后就可以一边下载音乐,一边听歌

    总结:

    操作系统必须先给应用软件分配资源,创建一个进程,然后才可以对应用程序进行执行和调度

    简而言之,操作系统先创建 进程 再执行 线程

    以上是进程和线程的关系的个人浅谈,希望能帮助到大家

    更多相关内容
  • 详细讲解进程和线程之间的区别,方便初学者能更深透的理解
  • 进程线程关系

    千次阅读 2022-06-19 22:01:58
    线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。2.线程进程的一部分,一个...

    进程与线程的关系
    1.进程是资源分配的基本单位,线程是CPU调度和分派的基本单位

    2.线程是进程的一部分,一个线程只能属于一个进程,一个进程可以有多个线程,但至少有一个线程

    3.每个进程都有独立的代码和数据空间(程序上下文),程序间的切换开销大,
    线程可看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程间切换开销小

    4.在操作系统中能同时运行多个进程(程序)
    在同一个进程(程序)中多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

    5.系统在运行的时候会为每个进程分配不同的内存空间
    线程除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源

    6.没有现成的进程可以看做单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,维斯多条线(线程)共同完成
    线程是进程的一部分,故线程被称为轻权进程/轻量级进程
     

    进程之间哪些可以共享?
    线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。

       进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括:


       1.线程ID
          每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识线程。

       2.寄存器组的值
          由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存,以便将来该线程在被重新切换到时能得以恢复。

       3.线程的堆栈
          堆栈是保证线程独立运行所必须的。
          线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以线程必须拥有自己的函数堆栈,使得函数调用可以正常执行,不受其他线程的影响。
       4.错误返回码
          由于同一个进程中有很多个线程在同时运行,可能某个线程进行系统调用后设置了errno值,而在该线程还没有处理这个错误,另外一个线程就在此时被调度器投入运行,这样错误值就有可能被修改。

          所以,不同的线程应该拥有自己的错误返回码变量。
       5.线程的信号屏蔽码
          由于每个线程所感兴趣的信号不同,所以线程的信号屏蔽码应该由线程自己管理。但所有的线程都共享同样的信号处理器。
       6.线程的优先级
          由于线程需要像进程那样能够被调度,那么就必须要有可供调度使用的参数,这个参数就是线程的优先级。

    进程间通信的五种方式
    1.(无名)管道

    半双工,即不能同时在两个方向上传输数据。有的系统可能支持全双工。

    只能在父子进程间。经典的形式就是管道由父进程创建,进程fork子进程之后,就可以在父子进程之间使用了。

    2.命名管道(FIFO)

    不相关的进程也能够进行数据交换。

    3.消息队列

    消息队列,就是一个消息的链表,是一系列保存在内核中消息的列表。用户进程可以向消息队列添加消息,也可以向消息队列读取消息。

    消息队列与管道通信相比,其优势是对每个消息指定特定的消息类型,接收的时候不需要按照队列次序,而是可以根据自定义条件接收特定类型的消息。

    可以把消息看做一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息,对消息队列有读权限的进程可以从消息队列中读取消息。

    4.信号量

    信号量是一个计数器,它主要用在多个进程需要对共享数据进行访问的时候。考虑这一的情况,不能同时有两个进程对同一数据进行访问,那么借助信号量就可以完成这样的事情。

    它的主要流程如下:

    检查控制该资源的信号量

    如果信号量值大于0,则资源可用,并且将其减1,表示当前已被使用

    如果信号量值为0,则进程休眠直至信号量值大于0

    也就是说,它实际上是提供了一个不同进程或者进程的不同线程之间访问同步的手段。

    5.共享内存

    共享内存允许两个或多个进程共享一个给定的存储区,这一段存储区可以被两个或两个以上的进程映射至自身的地址空间中,一个进程写入共享内存的信息,可以被其他使用这个共享内存的进程,通过一个简单的内存读取错做读出,从而实现了进程间的通信。

    采用共享内存进行通信的一个主要好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝,对于像管道和消息队里等通信方式,则需要再内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次:一次从输入文件到共享内存区,另一次从共享内存到输出文件。

    一般而言,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时在重新建立共享内存区域;而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件,因此,采用共享内存的通信方式效率非常高。

    6.套接字Socket:

    套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同计算机间的进程通信。

    7.信号 ( sinal )

    信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生

    展开全文
  • 线程进程关系

    万次阅读 多人点赞 2018-12-17 19:41:33
    线程进程1 线程进程2

    线程进程1
    线程进程2

    当你浏览这个博客的时候,我想你可以从这个博客解决下面的问题:

    1. 什么是线程
    2. 什么是进程
    3. 线程与进程的区别
    4. 线程与进程的联系

    关于线程与进程的概念,我们可以使用集合的角度来理解,如果说一个计算机的所有程序运行量是个总集,那么,这个总集就是由所有的进程进行总和的,比如我们打开我们的任务管理,就可以看到下面的截图所示:
    在这里插入图片描述

    线程与进程的关系
    电脑同时就在进行着200个进程
    1.线程与进程概念
    线程: 每个进程中至少包含一个线程,而这些线程都在共享进程的资源空间等,当线程发生变化的时候只会引起CPU执行的过程发生变化,不会改变进程所拥有的资源。同理一个程序中至少包含一个进程。进程中执行运算的最小单位,亦是执行处理机调度的基本单位
    进程: 每个进程都有自己的地址空间,资源如,内存,I/O,CPU,同一个进程里的 线程共享本进程里的地址空间,那能不能使用别人家进程的地址空间呢,显然这是不可以的。由于进程的独立性,当某一个进程崩溃之后,在保护模式下不会对别的进程进行影响。资源分配的基本单位,运行调度的基本单位,系统中并发执行的单位。
    2.使用区别
    当我们对资源的保护管理要求比较高的时候,建议使用多进程,当然存在的开销也会比较大,反过来,如果频繁切换下,对资源的保护管理要求不那么高,或者开销有限,使用多线程会比较方便。
    3.两者的比较
    (1)调度
    同一个进程中,线程的切换不会引起进程的切换;
    由一个进程的线程切换到另一个线程的进程时,引起进程的切换。
    (2)并发性
    进程可以并发执行,而一个进程中的线程也可以并发执行
    (3)拥有的资源
    一般来说,线程并不会拥有自己的资源,但是它可以访问自己本进程中的资源,比如,一个进程打开的文件等,进程的其他线程是可以共享的。
    (4)系统开销
    这个跟切换有关,则,下一个可以仔细讲解。

    展开全文
  • 进程和线程的区别(超详细)

    万次阅读 多人点赞 2019-10-03 21:57:46
    进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程线程 进程中的一个执行任务(控制单元),负责...

    进程和线程

    进程

    一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。

    任务管理器

    线程

    进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。

    与进程不同的是同类的多个线程共享进程的方法区资源,但每个线程有自己的程序计数器虚拟机栈本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

    Java 程序天生就是多线程程序,我们可以通过 JMX 来看一下一个普通的 Java 程序有哪些线程,代码如下。

    public class MultiThread {
    	public static void main(String[] args) {
    		// 获取 Java 线程管理 MXBean
    		ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
    		// 不需要获取同步的 monitor 和 synchronizer 信息,仅获取线程和线程堆栈信息
    		ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false, false);
    		// 遍历线程信息,仅打印线程 ID 和线程名称信息
    		for (ThreadInfo threadInfo : threadInfos) {
    			System.out.println("[" + threadInfo.getThreadId() + "] " + threadInfo.getThreadName());
    		}
    	}
    }
    

    上述程序输出如下(输出内容可能不同,不用太纠结下面每个线程的作用,只用知道 main 线程执行 main 方法即可):

    [6] Monitor Ctrl-Break //监听线程转储或“线程堆栈跟踪”的线程
    [5] Attach Listener //负责接收到外部的命令,而对该命令进行执行的并且把结果返回给发送者
    [4] Signal Dispatcher // 分发处理给 JVM 信号的线程
    [3] Finalizer //在垃圾收集前,调用对象 finalize 方法的线程
    [2] Reference Handler //用于处理引用对象本身(软引用、弱引用、虚引用)的垃圾回收的线程
    [1] main //main 线程,程序入口
    

    从上面的输出内容可以看出:一个 Java 程序的运行是 main 线程和多个其他线程同时运行

    进程与线程的区别总结

    线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。

    根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位

    资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

    包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

    内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的

    影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

    执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行

    从 JVM 角度说进程和线程之间的关系(重要)

    图解进程和线程的关系

    下图是 Java 内存区域,通过下图我们从 JVM 的角度来说一下线程和进程之间的关系。

    在这里插入图片描述

    从上图可以看出:一个进程中可以有多个线程,多个线程共享进程的方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器虚拟机栈本地方法栈

    程序计数器为什么是私有的?

    程序计数器主要有下面两个作用:

    1. 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。
    2. 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。

    需要注意的是,如果执行的是 native 方法,那么程序计数器记录的是 undefined 地址,只有执行的是 Java 代码时程序计数器记录的才是下一条指令的地址。

    所以,程序计数器私有主要是为了线程切换后能恢复到正确的执行位置

    虚拟机栈和本地方法栈为什么是私有的?

    • 虚拟机栈:每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。
    • 本地方法栈:和虚拟机栈所发挥的作用非常相似,区别是: 虚拟机栈为虚拟机执行 Java 方法 (也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。 在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。

    所以,为了保证线程中的局部变量不被别的线程访问到,虚拟机栈和本地方法栈是线程私有的。

    一句话简单了解堆和方法区

    堆和方法区是所有线程共享的资源,其中堆是进程中最大的一块内存,主要用于存放新创建的对象 (所有对象都在这里分配内存),方法区主要用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

    多进程和多线程区别

    多进程:操作系统中同时运行的多个程序

    多线程:在同一个进程中同时运行的多个任务

    举个例子,多线程下载软件,可以同时运行多个线程,但是通过程序运行的结果发现,每一次结果都不一致。 因为多线程存在一个特性:随机性。造成的原因:CPU在瞬间不断切换去处理各个线程而导致的,可以理解成多个线程在抢CPU资源。

    多线程提高CPU使用率

    多线程

    多线程并不能提高运行速度,但可以提高运行效率,让CPU的使用率更高。但是如果多线程有安全问题或出现频繁的上下文切换时,运算速度可能反而更低。

    Java中的多线程

    Java程序的进程里有几个线程:主线程,垃圾回收线程(后台线程)等

    在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。

    Java支持多线程,当Java程序执行main方法的时候,就是在执行一个名字叫做main的线程,可以在main方法执行时,开启多个线程A,B,C,多个线程 main,A,B,C同时执行,相互抢夺CPU,Thread类是java.lang包下的一个常用类,每一个Thread类的对象,就代表一个处于某种状态的线程

    展开全文
  • 线程进程关系和区别

    千次阅读 2020-07-09 21:33:32
    线程进程关系和区别 一、线程的定义 线程进程的基本执行单元,一个进程的所有任务都在线程中执行。 进程至少要有一条线程。 程序启动默认开启一条线程,这条线程被称为主线程或UI线程。 二、进程的定义 进程是...
  • 进程和线程关系

    万次阅读 2018-08-19 10:54:35
    **一、进程 1、进程的概念** 进程是操作系统实现并发执行的重要... 进程最根本的属性是动态性并发性。以下是从不同角度对进程的解释: a、进程是程序的一次执行 b、进程是可以与其他计算并发执行的计算...
  • 线程和进程的区别联系

    千次阅读 2022-03-26 14:33:51
    操作系统任何处理线程 1.先描述一个进程(明确出一个进程上面的一些相关的属性) 操作系统里面主要是通过c/c++来实现的,此处的描述其实就是用的c语言中的"结构体"(操作系统中描述进程的这个结构体称为"PCB"(process...
  • 进程和线程的区别联系

    千次阅读 2022-03-31 09:08:53
    目录线程概念存在意义进程和线程的区别联系 线程 概念 进程就是一个"执行流",按照某种顺序执行自己的代码。 存在意义 如今各种操作系统均能实现多进程同时执行,也就是支持并发编程。一个进程的创建需要消耗计算机...
  • 线程和进程的区别

    千次阅读 2020-02-19 17:11:05
    3.线程和进程之间的关系? 4.进程之间的通信? 5.线程之间的通信? 1.进程是什么 进程 -- 资源分配的最小单位。 网上查询的答案中很多都是这样的回答,但是这个回答自我感觉还是比较抽象。计算机的核心是cpu,...
  • 进程线程和协程的关系与区别

    千次阅读 2021-06-20 19:06:55
    进程线程和协程 1. 进程(Process) 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配调度的基本单位,是操作系统结构的基础。 2. 线程(Thread) 线程有时被称为轻量级进程( ...
  • 进程线程和CPU 之间的关系(一)

    千次阅读 2020-10-31 15:43:15
    今天开始,这个专题主要讲解 java 并发编程系列,从操作系统的进程、CPU、线程等底层开始,到java 并发工具类,线程、线程池,并发容器、CAS、AQS等原理、源码使用均...今天讲进程线程和CPU 之间的关系 。 1、 ...
  • 一、什么是程序 程序是计算机系统中存储的数据文件,大可分为...三、程序和进程关系 1、程序和进程的区别 (1)程序是计算机硬盘中的静态文件,存储在内存中的一段由二进制表示的文件; (2)进程是内存中动态的
  • python重进程线程、协程的关系,实现代码,生成器与装饰器实现。
  • 线程和进程的区别(面试必备)

    万次阅读 多人点赞 2019-09-12 17:55:07
    线程进程的区别通俗的解释: https://www.jianshu.com/p/8ad441510860 附加可参考文章: https://baijiahao.baidu.com/s?id=1611925141861592999&wfr=spider&for=pc https://www.c...
  • 内核,进程线程之间的关系

    千次阅读 2022-03-07 19:23:52
    内核: 在计算机科学中,内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。...进程: 1、用户角度
  • 如果把一个进程想象成是一个工厂,线程就是工厂中的若干...销毁一个线程比销毁一个进程成本也低,成本低的原因是:新创建一个线程,不需要给这个线程分配很多的资源,因为大部分资源都是原来的线程共享的。如果新创建
  • 进程、子进程关系 资源:子进程得到的是除了代码段是与父进程共享的,其他所有的都是得到父进程的一个副本,子进程的所有资源都继承父进程,得到父进程资源的副本,所以二者并不共享...线程进程关系 通常意义上
  • java进程和线程区别与不同

    千次阅读 2021-03-06 01:54:33
    java进程和线程区别与不同。一、定义1.进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配调度的一个独立单位。2.线程进程的一个实体,是CPU...进程和线程关系:(1)一个线程...
  • 栈:是个线程独有的,保存其运行状态局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是 thread safe的。每个C ++对象的数据成员也存在在栈中,每个函数都有自己的栈,栈被用来在...
  • Java线程和进程区别

    万次阅读 多人点赞 2018-08-06 21:07:56
    进程:是并发执行的程序在执行过程中分配管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。 线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为...
  • C#线程和进程

    千次阅读 2018-07-25 19:59:41
    一个正在运行的应用程序在操作系统中被视为一个进程进程可以包括一个或多个线程。 什么是线程线程是操作系统分配处理器时间的基本单元,也是一个独立的运行单 元,每个进程内部都有多个线程,每个线程都可以...
  • 浅谈线程和进程

    千次阅读 2020-06-15 22:36:11
    线程和进程是程序员老生常谈的问题了,任何阶段的程序员都不敢轻视他。 事实上大部分程序员并没有系统化的学习过,也有很多人并没有机会好好运用它。所以,如果拉一个工作多年的程序员讨论,对方未必能说出个所以然...
  • 线程和进程有什么区别(简单介绍)

    万次阅读 多人点赞 2018-08-13 19:23:00
    线程和进程有什么区别(简单介绍) 简单介绍 一、线程的基本概念  线程进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度分派的基本单位,线程自己不拥有系统资源,只拥有一点...
  • 进程和线程

    千次阅读 2021-05-08 15:49:53
    一、进程和线程 进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。 线程进程的一个执行流,是CPU调度...
  • 一、定义进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。...二、关系和区别一个线程可以创建和撤销另一个线程;同一个进程中的多个...
  • 进程和线程的深入理解

    万次阅读 多人点赞 2019-04-25 00:14:40
    进程和线程的深入理解,从抽象类比到与原理,阐述了两者的区别
  • 首先我们要知道线程是什么? 线程是程序中执行的线程,Java虚拟机允许程序同时运行多个执行线程线程也可以说是一条独立的执行...进程和线程有什么区别? 根本区别:进程操作系统分配资源的基本单位,而线程是任务调
  • 通俗易懂的 Java 线程和进程区别

    千次阅读 2021-01-18 17:28:00
    1. 什么是线程和进程 1.1. 何为进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 在 Java 中,当我们启动 main 函数时其实...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 318,539
精华内容 127,415
关键字:

线程和进程的关系