首页 > 系统相关 >协程 goroutine,线程,进程,GPM,的介绍

协程 goroutine,线程,进程,GPM,的介绍

时间:2023-04-07 22:57:38浏览次数:39  
标签:GPM 协程 多个 goroutine 并发 线程 进程 Go

前言:

进程,线程,协程,并发,并行介绍

正文:

线程,进程介绍:

1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;

2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线

3. 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间

4. 调度和切换:线程上下文切换比进程上下文切换要快得多

5.一个进程可以创建和撤销多个线程,同一个进程中的多个线程之间可以并发执行。

6.一个程序至少有一个进程,一个进程至少有一个线程

7.线程上下文切换比进程上下文切换要快得多

8.进程拥有独立的虚拟内存地址空间,线程共享进程的虚拟地址空间

 

线程,协程介绍:

协程:一种比线程更加轻量级的存在,调度由用户自己控制,本质上有点类似于用户级线程正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。

线程:一个线程上可以跑多个协程,协程是轻量级的线程。

一个线程可以多个协程

线程进程都是同步机制,而协程则是异步。

协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态

线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程

 

并行,并发介绍:

并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。在同一时间点,任务一定是同时运行。

并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。在同一时间点,任务并不会同时运行。

多线程程序在单核心的 cpu 上运行,称为并发;多线程程序在多核心的 cpu 上运行,称为并行。

并发与并行并不相同,并发主要由切换时间片来实现“同时”运行,并行则是直接利用多核实现多线程的运行,Go程序可以设置使用核心数,以发挥多核计算机的能力。

 

Go中的协程 Goroutine

Goroutine 是 Go语言中的轻量级线程实现,Go从语言层面支持了协程。可在单个进程里执行成千上万的并发任务,它是Go语言并发设计的核心。不同的是,Go 运行时(runtime)管理、系统调用等多方面对 Goroutine 调度进行了封装和处理,Go 程序会智能地将 Goroutine 中的任务合理地分配给每个 CPU。

 

优雅的并发编程范式,完善的并发支持,出色的并发性能是Go语言区别于其他语言的一大特色。

GPM调度:

 

 

 

G: Goroutine我们所说的协程,为用户级的轻量级线程,里面除了存放本goroutine信息外 还有与所在P的绑定等信息。

P:Processor为G和M的调度对象,用来调度G和M之间的关联关系,其数量可通过GOMAXPROCS()来设置,默认为核心数。

M:Machine是Go运行时(runtime)对操作系统内核线程的虚拟, M与内核线程一般是一一映射的关系, 一个groutine最终是要放到M上执行的。

 

标签:GPM,协程,多个,goroutine,并发,线程,进程,Go
From: https://www.cnblogs.com/ypeih/p/17297616.html

相关文章

  • goroutine协程创建和使用
    前言:协程的创建和使用,Go语言中使用goroutine非常简单,只需要在调用函数的时候在前面加上go关键字,就可以为一个函数创建一个goroutine。 正文: 函数创建goroutine语法:go函数名(参数列表)函数名:要调用的函数名。参数列表:调用函数需要传入的参数。  goroutine实例1......
  • golang pprof 监控系列(4) —— goroutine thread 统计原理
    golangpprof监控系列(4)——goroutinethread统计原理大家好,我是蓝胖子。在之前golangpprof监控系列文章里我分别介绍了gotrace以及gopprof工具对memory,block,mutex这些维度的统计原理,今天我们接着来介绍golangpprof工具对于goroutine和thread的统计原理。还记得在......
  • Kotlin 协程真的比 Java 线程更高效吗?
    vivo互联网技术微信公众号 作者:吴越网上几乎全部介绍Kotlin的文章都会说Kotlin的协程是多么的高效,比线程性能好很多,然而事情的真相真是如此么?协程的概念本身并不新鲜,使用C++加上内嵌汇编,一个基本的协程模型50行代码之内就可以完全搞出来。早在2013年国内就有团队开源了号称支持......
  • golang 是抢占式调度 如果协程不主动让出 或者 阻塞 可以一直运行
    设置处理的器的数量为1是什么将处理器设置为1就是可以控制线程数呢?在GMP模型中,P与M一对一的挂载形式,通过设定GOMAXPROCS变量就能控制并行线程数。演示案例packagemainimport( "fmt" "runtime" "runtime/debug" "runtime/pprof" "time")funcmain()......
  • NonBlocking 非阻塞IO 状态下的实现单线程协程socket通信
    #服务器端#-*-coding:utf-8-*-importtimefromsocketimport*server=socket(AF_INET,SOCK_STREAM)server.bind(('127.0.0.1',8081))server.listen(5)server.setblocking(False)#至关重要的一步!!!conn_l=[]print('waiting...')whileTrue:......
  • 协程
    目录引子协程介绍Gevent模块协程代码实战猴子补丁猴子补丁的功能(一切皆对象)monkeypatch的应用场景猴子补丁使用协程实现高并发1服务端客户端协程实现高并发2服务端客户端引子之前我们学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的......
  • 协程
    协程#协程的概念在操作系统中,压根不存在的,操作系统中,只有进程和线程的概念,他们俩个都是由操作系统调度的#协程是用户态的轻量级线程:用户态===>程序员#协程是单线程下的并发#并发:切换和保存状态开启协程fromgeventimportspawndefres(a,b):print(a)print(b)......
  • go语言学习-并发概念以及goroutine
    进程和线程  进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能......
  • Python多任务-多线程-多进程-协程-进阶学习
    --多任务-多线程-多进程-协程-进阶学习--文中所提到的案例参考:GITHUB中项目文件夹https://github.com/FangbaiZhang/Python_advanced_learning/tree/master/02_Python_ad......
  • Go06-文件操作+单元测试+goroutine+channel+反射
    Go06-文件操作+单元测试+goroutine+channel+反射1.打开和关闭文件funcmain(){ //1打开文件。 //file可以称为file对象、file指针、file文件句柄。 file,err:=......