首页后端开发其他后端知识协程是什么,golang可以实现么

协程是什么,golang可以实现么

时间2024-03-27 03:58:03发布访客分类其他后端知识浏览1358
导读:今天就跟大家聊聊有关“协程是什么,golang可以实现么”的内容,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 golang如何实现协程?golang实...
今天就跟大家聊聊有关“协程是什么,golang可以实现么”的内容,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

golang如何实现协程?

golang实现协程的方法:

实现并发编程有进程,线程,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协程的实现方式了,协程,自己管理线程,把线程控制到一定的数量,然后构造一个规则状态机来调度任务。


现在大家对于协程是什么,golang可以实现么的内容应该都清楚了吧,希望大家阅读完这篇文章能有所收获。最后,想要了解更多协程是什么,golang可以实现么的知识,欢迎关注网络,网络将为大家推送更多相关知识点的文章。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

golang协程

若转载请注明出处: 协程是什么,golang可以实现么
本文地址: https://pptw.com/jishu/653964.html
读写锁是什么,golang读写锁学习 go中可以自定义包么,具体的方法是怎样

游客 回复需填写必要信息