GO高级特性 之 并发模型

news2024/11/23 21:33:57

本文介绍一些并发的基础知识、常见的并发模型一级Go语言的MPG并发模型及其运行原理

并发与并行的区别

-并发并行
概念并发指同一时间段,多条命令在CPU上同时执行。并行指同一时刻,多条命令在CPU上执行
运行原理并发程序不要求计算机有多核计算能力,在同一时段内,多个线程会被分配到一定的执行时间片,在CPU轮训执行。线程执行时间到或者执行完毕,会被CPU调度换下并行程序要求计算机有多核计算能力,同一时刻多个线程CPU的的多个内核上执行命令。
其他可能会有线程互相等待、变为串行。完全独立,不需要等待

GO语言中的并发模型

1)线程与锁并发模型:基于共享内存实现,依赖开发人员的能力和技巧,不容易排查
2)CSP并发模型:通讯手段共享内存,并发实体是独立的,通过通道实现数据交互,通道读取数据和存放数据会阻塞并发实体,容易造成死锁

线程模型

操作系统分为 内核空间和用户空间。线程分为内核线程和用户线程。

1)用户线程调度由线程完成,无需切换内核、资源消耗少且高效。同一进程下创建的用户线程是以进程维度参与CPU的竞争,用户线程分时复用分配CPU时间
2)内核线程调度由操作系统完成,切换时CPU需要切换到内核态,通过系统调用使用内核线程。

常见的线程模型

1)用户级线程模型:一个进程对应一个内核线程。调度由用户完成,实现与编程语言,使用分时复用调度,非常轻量级高效, 但无法利用多核优势,容易发生阻塞。
在这里插入图片描述

2)内核级线程:进程的每个线程都会对应一个内核线程。调度由系统完成,可以利用多核优势,线程之间不会发生阻塞。但上下文切换时会从用户态切换到内核态,有资源消耗,创建的线程数依赖操作系统内核线程数量。
在这里插入图片描述

3)两级线程模型:一个进程对应多个内核线程,由进程的调度器决定如何分配内核线程,进程预先申请一定数量的内核线程,线程的调用由调度器负责,内核线程的调度由操作系统负责,降低线程创建的资源消耗,单增加了切换上下文处理和栈大小管理等
在这里插入图片描述

go的MPG线程模型

file
1)Machine:一个Machine对应一个内核进程,在M的生命周期内,M和内核的绑定关系不变
2)Processor:执行必须的上下文环境,用户代码逻辑处理器,运行时一个M只能绑定一个P,M和P的组合才可以运行GO程序
3)goroutine:用户代码片,用户线程,P和义绑定多个G,多个G排成队列挂载P上面,依次调度。
file
a)当没有足够的M和P组合时,会创建新的M,单个程序中M的数量往往大于P,P由程序决定,P的最大数量决定了并发规模通过环境变量GOMAXPROCS或者函数runtime.GOMAXPROCS修改配置
b)当G0因为某些原因阻塞了M,P会携带剩余的G投入其他空闲的M中,如果没有空闲的会新建一个M。当M对应的内核线程被唤醒时,M会为G0捕捉一个空闲的P,如果不成功,就会把G0放入可执行的G队列后面,等待其他P查找。
file
d)为了保证G的均衡执行,非空闲的P执行完成后,会从可执行G的队列中获取待执行的G,也可能会从其他P的G队列中掠夺G

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

毕设选题推荐基于python的django框架医疗急诊预约系统

💖🔥作者主页:计算机毕设老哥🔥 💖 精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 Java实战项目专栏 Python实…

项目成本管理质量管理

项目成本管理-控制成本目录概述需求:设计思路实现思路分析1.EVM2.偏差指标3.Question:4.绩效指标5.典型偏差TCPIS曲线图绩效审查参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip …

[近两万字] MySQL大全

目录 单元1 创建数据库 1.1 创建数据库 1.查看数据库 2.选择数据库 3.删除数据库 1.2 创建数据表 1.查看表结构 2.查看所有数据表 3.复制表结构 4.删除表 5.修改表数据 5.1 修改表名 5.2 添加字段 5.3删除字段 5.4修改字段的数据类型 5.5修改字段的名称 5.6修改字段…

[网络工程师]-应用层协议-SNMP

简单网络管理协议(Simple Network Management Protocol,SNMP)是在应用层上进行网络设备间通信的管理协议,可以用于网络状态监视、网络参数设定、网络流量统计与分析、发现网络故障等。SNMP基于UDP协议,由SNMP协议、管理…

【交通建模】基于模型的自主交通仿真框架附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

【深入浅出Java并发编程指南】「难点 - 核心 - 遗漏」让我们一起探索一下CyclicBarrier的技术原理和源码分析

CyclicBarrier和CountDownLatch CyclicBarrier和CountDownLatch 都位于java.util.concurrent这个包下,其工作原理的核心要点: CyclicBarrier工作原理分析 那么接下来给大家分享分析一下JDK1.8的CyclicBarrier的工作原理。 简单认识CyclicBarrier 何为…

Nginx动静分离、缓存配置、性能调优、集群配置

一. Nginx动静分离 1. 准备 1个web程序:部署在7061端口,启动 【dotnet NginxWeb.dll --urls"http://*:7061" --ip"127.0.0.1" --port7061】 Nginx程序:监听7000端口 2. 目的 比如单独启动部署在7061端口下的web程序&am…

c++ 静态库,动态库的制作和使用

文章目录1.什么是库?2.静态库的制作1.静态库的命名规则2.静态库的制作与使用1.静态库的制作2.静态库的使用3.动态库的制作1.动态库的命名规则2.动态库的制作与使用1.动态库的制作2.动态库的使用3.动态库加载失败的原因4.静态库和动态库的对比1.程序编译成可执行文件…

[附源码]Python计算机毕业设计Django基于Java的失物招领平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

时序数据库选型

目录一、当前主流的时序数据库二、各库特性1、Influxdb2、Timescale3、Druid4、Kdb5、Graphite6、RRDtool7、OpenTSDB8、TDengine9、DolphinDB三、优缺点对比因为个人用的go,所以调研及对比主要针对适配了go语言的数据库。 一、当前主流的时序数据库 排名参考于h…

基于PHP+MySQL动漫专题网站系统的设计与实现

随着时代的发展,人们兴趣爱好也越来越广泛,动漫是当前年轻人比较钟爱的一个兴趣爱好之一,每年都会有大量的动漫爱好者定期的举办一些交流活动等,但是线下的这种交流方式明显不能满足当前动漫爱好者的需求,为此我开发了…

Zen of Python(python之禅)

在python中导入import this就会显式: 以下是中文英文翻译: Beautiful is better than ugly. 优美比丑陋好 Explicit is better than implicit. 清晰比晦涩好 Simple is better than complex. 简单比复杂好 Complex is better than complicated. 复杂比错…

【全干工程师必学】一文搞懂Vue2.0

一文搞懂Vue2.0一、前端工程化二、WebPack是什么基本使用实现奇偶行变色1.初始化包管理工具2.安装jquery3.在项目中安装webpack4.在项目中配置webpack5.运行代码mode 的可选值developmentproductionwebpack.config.js 文件的作用webpack 中的默认约定自定义打包的入口与出口web…

uni-app开发常用操作速查记录

记录一下uni-app中常用的使用方法或是操作步骤,方便后期速查使用. 1.设置对象属性 2.组件中数据变化监听方法 3.微信开发者工具中全局搜索与局部搜索 4.Page对象与Componet对象组成 5.tabbar页面切换方法 6.组件中自定义函数的参数传递 7.m…

Android Jetpack Compose的基本介绍

目录一、引言:Android Jetpack1.Jetpack是什么?2. 常用的Jetpack库二、Compose的基本概念1.什么是Jetpack Compose2.Compose的编程思想三、 Compose简单的案例: 一个倒计时效果1.构建一个Compose项目2.声明一个倒计时的UI3.利用线程使其动起来4.实现效果…

快速了解Docker

目录 1.简介 2.Docker的安装及环境配置 2.1.查看是否是root用户 2.2.查看当前内核版本 2.3.更新yum源 2.4.安装Docker所需要的工具包 2.5.设置yum源 2.6.下载安装Docker 2.7.启动Docker并且设置开机自启动 2.8.测试是否安装成功 3.Docker阿里云镜像仓库配置 4.Docker常…

C++ vector

目录 1.vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 1.2.1 vector的定义 1.2.2 vector iterator 的使用 1.2.3 vector 空间增长问题 1.2.3 vector 增删查改 1.2.4 vector 迭代器失效问题。(重点) 1.2.5 vector 在OJ中的使用 2.vec…

【Linux】Linux的常见指令详解(上)

目录 前言 ls pwd cd mkdir touch rm man tree nano cp mv cat echo more/less 前言 🧁Linux作为相较于windows的另一种操作系统,同时基于其开源的优越性,使得其在各各企业的使用率极高。因此学好Linux操作系统对我们来说是…

Mongoose应用和文件文件的上传和下载

一、Express框架访问MongoDB数据库 1、目的: ​ (1)mongoose模块的使用 ​ (2)学会代码的封装:dao层、service层、接口层 ​ (3)MVC设计思想:M(Model)、V(View)、C(C…

[附源码]Python计算机毕业设计Django基于SpringBoot的演唱会购票系统论文2022

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…