首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请你说说进程和线程的区别
[问答题]
请你说说线程和协程的区别
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(122)
分享
纠错
273个回答
添加回答
185
小番茄茄
协程与线程的区别: 1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程。 2) 线程进程都是同步机制,而协程则是异步。 3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。 4)线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。 5)协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。 6)线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。
发表于 2022-04-29 14:38:14
回复(3)
107
烟雨飘渺
问题是线程和协程的区别,解题思路是进程和线程的区别😓
发表于 2022-04-14 16:16:34
回复(7)
95
十七_
1.线程是进程的子集,一个进程中可以包含多个线程,每条线程执行不同的任务; 2.不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间; 3.每个线程拥有单独的栈内存用来存储本地数据。
发表于 2022-04-20 11:02:11
回复(3)
52
菜根檀
协程是线程的抽象单位,减少了线程切换过程中的资源代价
发表于 2022-04-21 19:41:18
回复(0)
29
牛客244457861号
进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,,而多个线程共享内存资源,减少切换次数,从而提高效率。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序小的能独立运行的基本单位。同一个进程中的多个线程之间可以并发执行
发表于 2022-04-20 17:39:05
回复(1)
25
腊云
线程和进程的区别: 概念:进程是资源分配的最小单位,线程是cpu调度的最小单位。 1.地址空间。进程有独立的地址空间,一个进程可以有多个线程;线程没有自己独立的地址空间,而是共享进程的堆和方法区,但是有自己的程序计数器、虚拟机栈和本地方法栈 2.开销。进程和线程切换的都要进行上下文切换,进程切换上下文的开销远大于线程的上下文切换时间,耗费资源也较大,效率差一些 3.并发。进程粒度要粗,并发性较低,线程的并发性较高 (为什么使用多线程https://blog.csdn.net/JMW1407/article/details/107222065) 4.使用。每个进程有一个独立的进程入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在一个进程中,由进程提供多个线程的执行控制。 5.内存。系统在运行时会为每个进程分配不同的内存空间;对于线程,除了cpu外,系统不会为线程分配内存。 6.一个进程崩溃后不会影响其他进程,但是一个线程崩溃后会导致整个进程都死掉,所以多进程比多线程更健壮。
发表于 2022-04-27 15:54:31
回复(0)
12
牛莲牛奶呀_
M
编辑于 2022-04-12 16:18:19
回复(7)
9
牛客623512057号
进程有独立的地址空间,线程没有单独的地址空间 进程切换上下文的消耗大于线程的切换上下文的消耗 进程的并发性低,线程的并发性高 线程不能独立执行,进程可以独立执行
发表于 2022-04-26 18:13:13
回复(0)
7
82号钱钱妙丽
进程和线程的主要差别在于他们是不同的操作系统资源管理方式。 1.进程有【独立的地址空间】,线程有自己的堆栈和局部变量,但是线程之间没有单独的地址空间 2.进程和线程切换时,需要切换进程和线程的上下文,【进程的上下文切换时间开销】远远大于【线程上下文切换时间】,耗费资源较大,效率要差一些 3.【进程的并发性较低,线程的并发性较高】 4.每个独立的进程有一个程序运行的入口,顺序执行序列和程序的出口,线程不能独立执行 5.系统在运行的时候会为【每个进程分配不同的内存空间】,对线程而言,除CPU外,系统不会为线程分配内存 6.一个【进程奔溃后】,在保护模式下不会对其他进程产生影响,但是一个线程奔溃后整个进程都会死掉,所以多进程比多线程更健壮。 ①进程是一个“执行中的程序”,是系统进行资源分配和调度独立单位; ②线程是进程的一个实体,一个进程中拥有多个线程,线程之间共享地址空间和其他资源; ③与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
发表于 2022-04-26 14:56:33
回复(2)
6
z000
协程是线程的抽象单位,减少了线程切换过程中的资源代价 这个答案不错
发表于 2022-04-26 10:17:10
回复(1)
5
猿宵
进程与线程的区别: 1、空间:进程有独立的地址空间,线程没有;系统会为进程分配内存空间,线程除了CPU除外,并不会为它分配内存空间 2、包含关系:一个进程可以有多个线程、一个线程可以有多个协程 3:宕机:一个进程崩溃不会导致其他进程不可用,一个线程崩溃会导致整个进程死掉 4:线程有自己的堆栈和局部变量 5:开销:线程和进程都可以上线文切换,线程上下文切换开销小,且并发性高;进程切换开销大且并发性低 线程与协程的区别: 1:包含关系:一个进程可以有多个协程,一个线程也可以有多个协程 2:同步:线程进程是同步,协程是异步 3:协程能保留上一次重入的状态,当程序重新调用时,可以直接进入上一次的调用的位置 4:资源占用:线程是抢占式,协程是非抢占式,也就是会所在同一时间只能有一个协程运行,相当于单线程 5:与线程调用关系:协程并不能代替线程,线程是分割的CPU资源,协程是执行的代码,协程并不会直接调用线程,它会调用线程的执行器
发表于 2022-05-17 07:40:12
回复(0)
4
夜色天空
线程:相比进程更加轻量级,linux的资源分配是进程为单位,但是调度是以线程为单位,多个线程公用一个进程的内存空间,线程可以分为用户线程与内核线程 协程:相比线程更加轻量级,协程切换调动是用户态上完成,多个用户态协程对应一个内核态线程,减少了切换,提高执行效率,例如go的GPM模型
发表于 2022-05-10 13:41:17
回复(0)
3
牛客486538595号
表面上看协程和线程似乎是同一个东西,能达到的效果也相同,但是在底层的实现上却有着非常大的区别,在服务器端的绝大部分应用中,协程要比线程节省资源的多。 通俗易懂的讲,线程是操作系统的资源,当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)
3
牛客309606397号
1.线程的切换需要在内核态进行,而协程的切换任然是用户态,协程是轻量级线程。 2。一个线程可以有多个协程,多个协程之间的切换其实任然是该线程在执行任务3.就资源调度方式来看,线程是抢占式资源调度,而协程是非抢占式的,需要用户自己主动释放资源
发表于 2022-05-10 11:19:47
回复(0)
3
牛客793464225号
线程是CPU调度执行的最小单位,协程是比线程更加轻量级的存在,区别在于协程不是被操作系统内核所管理,而完全被程序进行控制。协程在一个线程中执行,消除了线程切换的开销,性能优势明显。协程不需要多线程的锁机制,具有极高的执行效率
编辑于 2022-07-06 21:11:30
回复(0)
3
弹指回眸
线程是进程的子集,一个程序至少有个进程,一个进程可以多个线程进行
发表于 2022-04-29 15:09:51
回复(0)
2
牛客93000449号
协程与线程的区别: 1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程。 2) 线程进程都是同步机制,而协程则是异步。 3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。 4)线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。 5)协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。 6)线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。
发表于 2022-09-26 17:45:29
回复(0)
2
海鸥不在眷恋大海
线程是进程里的最小执行单元,一个进程可以包含多个线程,进程用于单独的内存单元,多个线程共享一个共同的内存空间
发表于 2022-07-04 10:50:04
回复(0)
2
签到题都不会
1. 协程运行在用户态,上下文切换开销较小,只需要把CPU少量寄存器保存,再加载新运行协程CPU寄存器即可。 2. 多个协程可运行在多个线程上,线程可以使用时分复用的方法使用这些协程,这些协程不会引起线程的增加。
发表于 2022-07-01 18:04:31
回复(0)
2
hellokka
进程是系统资源进行分配 ,调度的独立单位,每一个进程都有它的系统资源和内存空间, 进程实现多处理机环境下的进程调度,分派,切换时,都需要耗费大量的时间和空间开销, 为了提高进程的执行效率,减少处理机的空转时间和调度切换时间,以及便于系统管理,所有就有了线程,线程取代了进程的调度的基本功能, 简单来说,进程作为资源分配的基本单位,线程作为资源调度的基本单位。
发表于 2022-05-19 09:37:34
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
操作系统
上传者:
real19931
难度:
273条回答
122收藏
3656浏览
热门推荐
相关试题
请编写实现malloc()内存分配...
微软
C++
操作系统
评论
(3)
有两个N*N的矩阵A和B,想要在P...
阿里巴巴
操作系统
评论
(38)
来自
阿里巴巴2015实习生笔试题
数据链路层滑动窗口机制中发送窗口(...
网络基础
评论
(1)
有关linux线程的描述,正确的是...
京东
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
PHP工程师
2018
评论
(1)
请你说几个海量数据存储常见问题以及...
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题