进程、线程、协程的区别?

本文阅读 3 分钟
首页 golang 正文
题目序号:(2363,2335,5898)
题目来源: 小米、奇安信、腾讯音乐
频次: 3

答案:小强

  • 概念定义

    进程: 进程是一个具有一定独立功能的程序关于某个数据集合上的一次运行活动,是==系统资源分配和独立运行的最小单位==。
    线程: 线程是进程的一个执行单元,是==任务调度和系统执行的最小单位==。
    协程: 协程是一种==用户态的轻量级线程==,协程的调度完全由用户控制。

  • 进程与线程的区别
    1 根本区别:进程是操作系统资源分配和独立运行的最小单位;线程是任务调度和系统执行的最小单位。
    2 地址空间区别: 每个进程都有独立的地址空间,一个进程崩溃不影响其它进程;一个进程中的多个线程共享该进程的地址空间,一个线程的非法操作会使整个进程崩溃。
    3 上下文切换开销区别: 每个进程有独立的代码和数据空间,进程之间上下文切换开销较大;线程组共享代码和数据空间,线程之间切换的开销较小。
  • 线程和协程的区别
    1 内存开销:创建一个协程需要2kb, 栈空间不够会自动扩容, 创建一个线程需要1M空间。
    2 创建和销毁:创建线程是和操作系统打交道,内核态 开销更大, 协程是由runtime管理,属于用户态 开销小。
    3 切换成本:线程切换 需要保存各种寄存器,切换时间大概在1500-2000us, 协程保存的寄存器比较少, 切换时间大概在200us, 它能执行更多的指令。
本文来自投稿,不代表本站立场,如若转载,请注明出处:
syncpool的实现原理
« 上一篇 09-17
问了sync.Map(我说我对sync.Pool比较熟,就说Pool了)
下一篇 » 09-17

发表评论

发表评论