新年学新语言Go之一

一、前言

搜索相关知识后续内容等上班后再继续,新年新气象,从今天开始学习一下Go语言,第一次听说这门语言还是2016年的时候,然后2018年买了一本书  Go In Action,然后就没有然后了, 转眼这么多年过去了,Go语言因为在服务端开发并发方面相当有优势,现在很多公司都在用,另外为了不浪费买书的钱,也有必要把Go语言学习一下,今天先了解一下Go语言这个最重要一个特性。

注:Docker和Consul都是Go开发的,Docker的使用可以看以前一些文章,还有几篇没写完。

二、几个概念

1、并发

在一个CPU上同时执行多个任务,在很短时间内CPU来回切换任务执行(可以理解为有的任务在等待IO暂时不用CPU资源),这样在时间上宏观来看是同时执行,但微观上对于CPU来讲还是顺序执行的,这就是并发。

2、并行

当系统有多个CPU时,每个CPU在同一时刻运行不同任务,互不抢占CPU资源,同时执行,这就是并行。

3、进程

有独立功能的程序关于某个数据集合一次运行活动,每个进程有自己独立的内存空间,进程间切换开销相对比较大,不同进程通过进程间通信来交互。

4、线程

可以理解为轻量级进程, 是进程的一个实体,也是CPU调度基本单位,线程基本上不拥有静态系统资源,只拥有一些运行时必不可少的资源(程序计数器、栈、寄存器),线程之间切换开销相对较小,线程间通信主要通过共享内存。

注:Redis采用的是单线程,这是因为它是基于内存的,CPU并不是它的瓶颈。

5、协程

用户态轻量级线程,协程并不是被操作系统内核所管理而是完全由用户程序所控制,这样协程切换时开销更小。

注:关于协程的概念,很久以前听毕玄做HSF分享时讲过,但协程好像在Java领域一直没有流行起来,或许可能只是因为我没有接触过。

6、CSP模型

于描述两个独立的并发实体通过共享通道(Channel)进行通信的并发模型,它不需要像多线程那样通过对数据进行加锁来进行同步访问。

三、Go并发机制

Go语言对并发的支持是它最重要的特性之一,它主要使用了CSP模型中两个概念

1、goroutine

goroutine是并发执行的实体,它的底层使用协程来实现并发,Go使用协程来处理并发,是因为协程一些优势,首先协程由用户空间管理避免了内核态用用户态切换成本,其二协程由语言框架层进行调度,其三可以在很小的空间创建大量的协程实例。

2、channel

channel通道是一种数据结构,用于goroutine之间进行安全的数据通信,有点类似于消息队列,一个goroutine将消息发送到channel,然后被另外一个goroutine消费掉,感觉就像是一个阻塞的消息队列。

3、Go调度器 GMP

go语言为goroutine提供语言层面的调度器,实现高效率的用户线程和内核线程多对多的关系。

G:待执行的goroutine,包含这个goroutine的栈空间。

M:内核线程。

P:是调度协调,用于协调M和G的执行,内核线程只有拿到了 P才能对goroutine继续调度执行,一般都是通过限定P的个数来控制golang的并发度。

下一篇再通过一个简单的并发例子来理解Go对并发的处理。

杭州又下雪了,很美,看雪去吧!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运放供电设计

文章目录 运放供电设计如何产生负电压BUCK电路BOOST电路产生负电压FLYBUCK产生负电压 运放供电设计 注:使用0.1u跟10u并联 如何产生负电压 问题:电流小,使用并联方式改善,缺点价格贵,淘宝上买的都是假货ICL7662多是用…

[java进阶]——IO流,递归实现多级文件拷贝

🌈键盘敲烂,年薪30万🌈 目录 一、认识IO流 二、了解编码与解码 二、IO流体系 三、字节输入输出流 四、字符输入输出流 五、多级文件拷贝 一、认识IO流 IO流也叫输入流(intput)、输出流(onput),该流就像java程序同硬盘之间的…

Visual Studio2019 与 MySQL连接 版本关系

Refer: VS 连接MySQL | mysql-for-visualstudio 的安装-CSDN博客 【精选】用VS2019(C#)连接MYSQL(从0入门,手把手教学)_mysql-for-visualstudio-1.2.9.msi_Flying___rabbit的博客-CSDN博客 一、工具:VS2019需要连接M…

E055-web安全应用-File Inclusion文件包含漏洞初级

课程名称: E055-web安全应用-File Inclusion文件包含漏洞初级 课程分类: web安全应用 实验等级: 中级 任务场景: 【任务场景】 小王接到磐石公司的邀请,对该公司旗下网站进行安全检测,经过一番检查发现了该论坛的某个页面存…

百度文心一言 4.0 :如何申请百度文心一言 4.0

本心、输入输出、结果 文章目录 百度文心一言 4.0 :如何申请百度文心一言 4.0前言文心一言 4.0 ERNIE-Bot 4.0 :ERNIE-Bot 4.0 大模型深度测试体验报告如何申请千帆大模型试用百度文心一言 4.0 主要功能介绍配套发布的十余款AI原生应用插件、API 生态 百…

Sql Server Report Service 使用简单说明

ReportServices做为报表服务器,结合sql直接访问数据库提供基本的报表格式设置显示,可以快速开发报表,主要包含两部分内容: 1.ReportServices服务器配置搭建,承载报表的运行平台 2.设计报表 ReportServices配置 1&am…

神经网络量化----为了部署而特别设计

引言:一般神经网络量化有两个目的: 为了加速,在某些平台上浮点数计算比较耗费时间,替换为整形可以加快运算为了部署,某些平台上只支持整形运算,比如在芯片中 如果是第1个目的,则使用常规的量化手…

小程序canvas层级过高真机遮挡组件的解决办法

文章目录 问题发现真机调试问题分析问题解决改造代码效果展示 问题发现 在小程序开发中需要上传图片进行裁剪&#xff0c;在实际真机调试中发现canvas层遮挡住了生成图片的按钮。 问题代码 <import src"../we-cropper/we-cropper.wxml"></import> <…

小程序-uni-app:将页面(html+css)生成图片/海报/名片,进行下载 保存到手机

一、需要描述 本文实现&#xff0c;uniapp微信小程序&#xff0c;把页面内容保存为图片&#xff0c;并且下载到手机上。 说实话网上找了很多资料&#xff0c;但是效果不理想&#xff0c;直到看了一个开源项目&#xff0c;我知道可以实现了。 本文以开源项目uniapp-wxml-to-can…

mybatis一级缓存和二级缓存

计算机有两大基本的功能&#xff1a;计算和存储 存储方面&#xff0c;缓存的设计和实现也是一门学问。这门学问里面包含什么门道呢&#xff1f;不妨研究一下MyBatis缓存类PerpetualCache&#xff0c;一定会大有收获的。在MyBatis里面&#xff0c;存在一个PerpetualCache&#x…

关闭mysql,关闭redis服务

1. 关闭redis服务&#xff1a; 查询redis安装目录&#xff1a; whereis redis which redis find / -name redis 关闭redis服务&#xff1a; redis-cli -h 127.0.0.1 -p 6379 auth 输入密码 shutdown 关闭redis服务 2. 关闭mysql服务&#xff1a; 查询mysql安装目录&…

python中不可变类型和可变类型

不可变类型&#xff1a;修改之后内存存储地址不会发生改变 可变类型&#xff1a;修改之后内存存储地址发生改变 set