go语言实现协程的方法

实现并发编程有进程,线程,IO多路复用的方式。(并发和并行我们这里不区分,如果CPU是多核的,可能在多个核同时进行,我们叫并行,如果是单核,需要排队切换,我们叫并发)

进程是计算机资源分配的最小单位,进程是对处理器资源,虚拟内存(1)的抽象,而虚拟内存是对主存资源和文件(2)的抽象,文件是对I/O设备的抽象。线程是计算机调度的最小单位,共享同个进程分配的计算机资源。

上面这些是在深入理解计算机系统说的。

总上所述,实际实现并发的是线程。首先,每个进程都有一个主线程,因为线程是调度的最小单位,你可以只有一个线程,但是你也可以创建多几个线程,线程调度需要CPU来切换,需要内核层的上下文切换,如果你跑了A线程,然后切到B线程,内核调用开始,CPU需要对A线程的上下文保留,然后切到B线程,然后把控制权交给你的应用层调度。进程切换也需要内核来切换,因为从C进程的主线程切换到D进程的主线程。

那么进程间要通讯呀,而且他们资源不共享,这个时候需要用IPC(Inter-Process Communication,进程间通信),常用的有信号量,共享内存,套接字,实际百度上说有六种耶,而同个进程的多个线程共享资源,通讯起来比进程容易多了,现在很多Java等编程语言都有这种线程交互实现。

至于IO多路复用,其实就是维持一个队列,然后让一个线程或多个线程,去队列里面拿任务去完成。为什么呢?因为线程的数量是有限的,而且线程间通讯需要点资源,内核也要频繁切换上下文。

一个线程的IO多路复用,典型的就是Redis和Nodejs了,根本不需要切换上下文,一个线程走天下。而多个线程的IP多路复用,就是Golang协程的实现方式了,协程,自己管理线程,把线程控制到一定的数量,然后构造一个规则状态机来调度任务。

原创文章,作者:OPEUO,如若转载,请注明出处:https://www.beidanyezhu.com/a/26427.html

(0)
OPEUO的头像OPEUO
上一篇 2025-01-02
下一篇 2025-01-03

相关推荐

  • 3个方法(句子表达效果)

    任何时候,我都觉得掌握演讲这种技能是非常重要的。 不管是跟别人沟通还是汇报工作,多多少少都会用到一些演讲的技巧。 很多时候在职场上,会说话的人比不会说话的人会混得更好。同样完成一项…

  • go语言中普通函数与方法有什么区别

    区别:对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然;对于方法,接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以。 Go语言中普通函数与…

  • python语言和go语言哪个比较好

    Python和Go都是用于编写Web应用程序的强大的高级编程语言,它们之间有什么区别吗?下面本篇文章就来带大家认识一下Python和Go语言。 Go语言是什么? Go是一种通用编程…

  • Go语言结构体是什么

    这篇文章给大家分享的是有关Go语言结构体是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。 Go 语言结构体 Go 语言中数组可以存储同一类型的数据,…

  • go语言如何从结构体中获取某个字段的值

    这篇文章主要介绍go语言如何从结构体中获取某个字段的值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! Go 语言提供了 user.Name 语法,来从 us…

  • go与python哪个比较容易点

    相比于Python的40个特性,Go只有31个,可以说Go在语言设计上是相当克制的。比如,它没有隐式的数值转换,没有构造函数和析构函数,没有运算符重载,没有默认参数,也没有继承,没…

  • go语言有哪些优点

    go语言的优点:1、可直接编译成机器码,不依赖其他库;2、静态类型语言,但是有动态语言的感觉,写起来的效率很高;3、语言层面支持并发;4、内置runtime,支持垃圾回收;5、简单…

  • go语言中make和new有哪些区别

    区别:在go语言中,make和new都是内存的分配(堆上),但是make只用于slice、map以及channel的初始化(非零值);而new用于类型的内存分配,并且内存置为零。m…

  • go语言的开发工具有哪些

    go语言开发工具:Gogland、Eclipse、LiteIDE、KomodoIDE、Atom、Brackets、Visual Studio Code、Cloud9、CodeEnv…

  • go语言和python有哪些区别

    区别:1、Python是一种基于面向对象编程的多范式,命令式和函数式编程语言;Go是一种基于并发编程范式的过程编程语言。2、Python是动态类型语言,Go是静态类型语言。3、Py…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部