文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

go语言中线程和进程的区别是什么

2023-05-14 20:04

关注

区别:1、线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位。2、一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线。3、线程上下文切换比进程上下文切换要快得多。4、进程切换需要的资源很最大,效率很低;线程切换需要的资源一般,效率一般。5、进程拥有自己的堆栈,进程之间不共享堆栈;线程拥有自己的栈,共享堆。

go语言中线程和进程的区别是什么

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

什么是线程、进程?

进程

线程

任务调度

大部分操作系统(Windows、Linux)的任务调度采用时间片轮转的抢占式调度方式
该调度方式如下:

这种方式保证了每个线程轮流执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在同时进行,这就是我们说的并发

1.png

进程和线程的区别

多线程和多核

多核处理器是指在一个处理器上集成了多个运算核心从而提高计算能力。也就是有多个真正并行计算的处理核心,每一个处理核心对应一个内核线程。

内核线程

每一个处理核心对应一个内核线程。
比如:

内核线程(Kernel Thread,KLT)就是直接由操作系统内核支持的线程。该线程由内核来完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。

超线程技术

目前处理器都采用了超线程技术将一个 物理处理核心模拟成两个逻辑处理核心,也就是两个内核线程。
所以我们看到的电脑一般都是双核四线程、四核八线程。
在操作系统中我们看到CPU数量是实际物理CPU数量的两倍,如双核四线程可以看到4CPU。

如我当前编写文章的这台mbp就是i7 6核12线程:

2.png

程序一般不会直接使用内核线程,而是使用内核线程的一种高级接口—轻量级进程(Lightweight Process,LWP),也就是我们常说的线程

协程

协程(Coroutines)基于线程之上,比线程更加轻量级。一个线程可以拥有多个协程。

协程的目的

传统应用中一般有会给网络请求创建一个线程去完成业务逻辑。如果是多个请求,就会创建多个线程来出来。
如果遇到很耗时的I/O行为,线程就会一直处于阻塞状态,如果很多线程都是出于这种空闲状态(等待该线程执行完成才能执行),这样就会造成资源应用不彻底,系统的吞吐能力下降。

最常见的很耗时的I/O行为比如JDBC,CPU会一直等待数据I/O操作的返回,这时线程根本没有利用CPU去做运算,而是处于空闲状态。同时使用过多的线程,也会带来更多的上下文切换开销。

解决上述问题有两个方案:

协程的特点

协程的原理

协程的流程:

而跑在由Coroutine负责调度的线程称为Fiber,比如Golang里的go关键字其实就是负责开启一个Fiber,让func逻辑跑在上面。

由于协程的暂停完全由程序控制,发生在用户态上;而线程的阻塞状态是由操作系统内核来进行切换,发生在内核态上。
因此协程的开销远远小于线程,也就没有上下文切换的开销。

线程和协程的比较

比较项线程协程
占用资源初始单位为1MB,固定不可变初始一般为2KB,可随需要增大
调度所属有OS内核完成由用户完成
切换开销设计模式切换(从用户态切换到内核态),16个寄存器、PC、SP等寄存器的刷新只有三个寄存器的值修改:PC、SP、DX
性能问题资源占用太高,频繁创建销毁会带来严重的性能问题资源占用小,不会带来严重的性能问题
数据同步需要锁等机制确保数据的一致性和可见性不需要多线程的锁机制,因此只有一个线程。也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比线程高很多

【相关推荐:Go视频教程、编程教学】

以上就是go语言中线程和进程的区别是什么的详细内容,更多请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯