首页 > 试题广场 >

请你说说进程和线程的区别

[问答题]
协程与线程的区别: 1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程。 2) 线程进程都是同步机制,而协程则是异步。 3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。 4)线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。 5)协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。 6)线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。
发表于 2022-04-29 14:38:14 回复(3)
问题是线程和协程的区别,解题思路是进程和线程的区别😓
发表于 2022-04-14 16:16:34 回复(7)
1.线程是进程的子集,一个进程中可以包含多个线程,每条线程执行不同的任务; 2.不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间; 3.每个线程拥有单独的栈内存用来存储本地数据。
发表于 2022-04-20 11:02:11 回复(3)
协程是线程的抽象单位,减少了线程切换过程中的资源代价
发表于 2022-04-21 19:41:18 回复(0)
进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,,而多个线程共享内存资源,减少切换次数,从而提高效率。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序小的能独立运行的基本单位。同一个进程中的多个线程之间可以并发执行
发表于 2022-04-20 17:39:05 回复(1)
线程和进程的区别: 概念:进程是资源分配的最小单位,线程是cpu调度的最小单位。 1.地址空间。进程有独立的地址空间,一个进程可以有多个线程;线程没有自己独立的地址空间,而是共享进程的堆和方法区,但是有自己的程序计数器、虚拟机栈和本地方法栈 2.开销。进程和线程切换的都要进行上下文切换,进程切换上下文的开销远大于线程的上下文切换时间,耗费资源也较大,效率差一些 3.并发。进程粒度要粗,并发性较低,线程的并发性较高 (为什么使用多线程https://blog.csdn.net/JMW1407/article/details/107222065) 4.使用。每个进程有一个独立的进程入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在一个进程中,由进程提供多个线程的执行控制。 5.内存。系统在运行时会为每个进程分配不同的内存空间;对于线程,除了cpu外,系统不会为线程分配内存。 6.一个进程崩溃后不会影响其他进程,但是一个线程崩溃后会导致整个进程都死掉,所以多进程比多线程更健壮。
发表于 2022-04-27 15:54:31 回复(0)
M
编辑于 2022-04-12 16:18:19 回复(7)
进程有独立的地址空间,线程没有单独的地址空间 进程切换上下文的消耗大于线程的切换上下文的消耗 进程的并发性低,线程的并发性高 线程不能独立执行,进程可以独立执行
发表于 2022-04-26 18:13:13 回复(0)
进程和线程的主要差别在于他们是不同的操作系统资源管理方式。 1.进程有【独立的地址空间】,线程有自己的堆栈和局部变量,但是线程之间没有单独的地址空间 2.进程和线程切换时,需要切换进程和线程的上下文,【进程的上下文切换时间开销】远远大于【线程上下文切换时间】,耗费资源较大,效率要差一些 3.【进程的并发性较低,线程的并发性较高】 4.每个独立的进程有一个程序运行的入口,顺序执行序列和程序的出口,线程不能独立执行 5.系统在运行的时候会为【每个进程分配不同的内存空间】,对线程而言,除CPU外,系统不会为线程分配内存 6.一个【进程奔溃后】,在保护模式下不会对其他进程产生影响,但是一个线程奔溃后整个进程都会死掉,所以多进程比多线程更健壮。 ①进程是一个“执行中的程序”,是系统进行资源分配和调度独立单位; ②线程是进程的一个实体,一个进程中拥有多个线程,线程之间共享地址空间和其他资源; ③与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
发表于 2022-04-26 14:56:33 回复(2)
协程是线程的抽象单位,减少了线程切换过程中的资源代价 这个答案不错
发表于 2022-04-26 10:17:10 回复(1)
进程与线程的区别: 1、空间:进程有独立的地址空间,线程没有;系统会为进程分配内存空间,线程除了CPU除外,并不会为它分配内存空间 2、包含关系:一个进程可以有多个线程、一个线程可以有多个协程 3:宕机:一个进程崩溃不会导致其他进程不可用,一个线程崩溃会导致整个进程死掉 4:线程有自己的堆栈和局部变量 5:开销:线程和进程都可以上线文切换,线程上下文切换开销小,且并发性高;进程切换开销大且并发性低 线程与协程的区别: 1:包含关系:一个进程可以有多个协程,一个线程也可以有多个协程 2:同步:线程进程是同步,协程是异步 3:协程能保留上一次重入的状态,当程序重新调用时,可以直接进入上一次的调用的位置 4:资源占用:线程是抢占式,协程是非抢占式,也就是会所在同一时间只能有一个协程运行,相当于单线程 5:与线程调用关系:协程并不能代替线程,线程是分割的CPU资源,协程是执行的代码,协程并不会直接调用线程,它会调用线程的执行器
发表于 2022-05-17 07:40:12 回复(0)
线程:相比进程更加轻量级,linux的资源分配是进程为单位,但是调度是以线程为单位,多个线程公用一个进程的内存空间,线程可以分为用户线程与内核线程 协程:相比线程更加轻量级,协程切换调动是用户态上完成,多个用户态协程对应一个内核态线程,减少了切换,提高执行效率,例如go的GPM模型
发表于 2022-05-10 13:41:17 回复(0)
表面上看协程和线程似乎是同一个东西,能达到的效果也相同,但是在底层的实现上却有着非常大的区别,在服务器端的绝大部分应用中,协程要比线程节省资源的多。 通俗易懂的讲,线程是操作系统的资源,当java程序创建一个线程,虚拟机会向操作系统请求创建一个线程,虚拟机本身没有能力创建线程。而线程又是昂贵的系统资源,创建、切换、停止等线程属性都是重量级的系统操作,非常消耗资源,所以在java程序中每创建一个线程都需要经过深思熟虑的思考,否则很容易把系统资源消耗殆尽。 而协程,看起来和线程差不多,但创建一个协程却不用调用操作系统的功能,编程语言自身就能完成这项操作,所以协程也被称作用户态线程。我们知道无论是java还是go程序,都拥有一个主线程,这个线程不用显示编码创建,程序启动时默认就会创建。协程是可以跑在这种线程上的,你可以创建多个协程,这些协程跑在主线程上,它们和线程的关系是一对多。如果你要创建一个线程,那么你必须进行操作系统调用,创建的线程和主线程是同一种东西。显然,协程比线程要轻量的多。 既然协程这么优秀,为什么不彻底替代线程呢?事实上协程和线程完全不是两个相同层面的东西,完全谈不上替代一说,协程可以说是一个独立于线程的功能,它是在线程的基础上,针对某些应用场景进一步发展出来的功能。我们知道,线程在多核的环境下是能做到真正意义上的并行执行的,注意,是并行,不是并发,而协程是为并发而生的。 打个简单的比方吧,射雕英雄传看过吧,周伯通教郭靖一手画圆,一手画方,两只手同时操作,左右互搏,这个就是并行。普通人肯定做不到,不信你试试。你不能并行,却可以并发,你先左手画一笔,然后右手画一笔,同一时候只有一只手在操作,来回交替,直到完成两个图案是,这就是并发,协程主要的功能。 想象一下业务场景,你需要执行两个互不依赖的sql查询,为了减少等待时间,常规的操作肯定主线程执行sqlB的同时另起一个线程执行sqlA,使两个sql并行执行。然而你会发现,执行两个sql的线程大多数时间只是在等待数据库服务器的响应,线程只是处于阻塞等待状态,而不是疯狂运转,而线程的创建、切换又很消耗系统资源,显然这很浪费。这个时候就该协程大展身手了,你可以在主线程中创建一个协程用于执行sqlB,然后再在主线程中执行sqlA,协程和线程一样,不会阻塞主线程,所以sqlB得到结果后,你可以通过语言的api去看看在协程中的sql执行完毕了没有,如果没有则等待,如果执行完毕了就拿结果,和线程操作几乎一摸一样。至于sqlA和sqlB是否真正在并行执行根本无所谓。为什么呢? 我们假设执行一个sql需要三步,提交sql、等待、获得结果 ,其中第一步和第三步极省时,只要1毫秒一步,而第二步却要1000毫秒,那么使用并行的多线程执行两个sql,你只要花掉1002毫秒,而使用并发的协程你要花掉1004毫秒,但是线程比协程多消耗一个线程的资源,请问你会为了这2毫秒而选择多线程吗,显然不可能,创建线程的开销都要大于节省下来的时间,这就是协程存在的理由。 而服务器端开发中,大多数时候都是要花大量等待时间的场景,也就是所谓的IO密集,协程极为适合这种场景,而go又主打协程,直接从语法层面支持,切中了以往开发高性能程序太过于复杂的痛点,因此广受程序员们的欢迎。java其实也可以模拟出协程的效果,比如用nio和多线程,也能假装goroutines的效果,但实际操作起来太过于麻烦,还要掌握一大堆枯涩的概念,完全没有goroutines的优雅。所以在并发性能上,go完胜java。换言之,go比java更适应高并发场景,能更优雅方便的写出高并发程序。
发表于 2022-08-11 00:53:42 回复(0)
1.线程的切换需要在内核态进行,而协程的切换任然是用户态,协程是轻量级线程。 2。一个线程可以有多个协程,多个协程之间的切换其实任然是该线程在执行任务3.就资源调度方式来看,线程是抢占式资源调度,而协程是非抢占式的,需要用户自己主动释放资源
发表于 2022-05-10 11:19:47 回复(0)
线程是CPU调度执行的最小单位,协程是比线程更加轻量级的存在,区别在于协程不是被操作系统内核所管理,而完全被程序进行控制。协程在一个线程中执行,消除了线程切换的开销,性能优势明显。协程不需要多线程的锁机制,具有极高的执行效率
编辑于 2022-07-06 21:11:30 回复(0)
线程是进程的子集,一个程序至少有个进程,一个进程可以多个线程进行
发表于 2022-04-29 15:09:51 回复(0)
协程与线程的区别: 1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程。 2) 线程进程都是同步机制,而协程则是异步。 3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。 4)线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。 5)协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。 6)线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。
发表于 2022-09-26 17:45:29 回复(0)
线程是进程里的最小执行单元,一个进程可以包含多个线程,进程用于单独的内存单元,多个线程共享一个共同的内存空间
发表于 2022-07-04 10:50:04 回复(0)
1. 协程运行在用户态,上下文切换开销较小,只需要把CPU少量寄存器保存,再加载新运行协程CPU寄存器即可。 2. 多个协程可运行在多个线程上,线程可以使用时分复用的方法使用这些协程,这些协程不会引起线程的增加。
发表于 2022-07-01 18:04:31 回复(0)
进程是系统资源进行分配 ,调度的独立单位,每一个进程都有它的系统资源和内存空间, 进程实现多处理机环境下的进程调度,分派,切换时,都需要耗费大量的时间和空间开销, 为了提高进程的执行效率,减少处理机的空转时间和调度切换时间,以及便于系统管理,所有就有了线程,线程取代了进程的调度的基本功能, 简单来说,进程作为资源分配的基本单位,线程作为资源调度的基本单位。
发表于 2022-05-19 09:37:34 回复(0)