首页 > 其他分享 >Go | 一分钟掌握Go | 8 - 并发

Go | 一分钟掌握Go | 8 - 并发

时间:2023-04-27 12:31:51浏览次数:43  
标签:函数 关键字 goroutine 一分钟 并发 go mars Go

 作者:Mars酱

 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。

 转载:欢迎转载,转载前先请联系我!

前言

当今编程界,一个好的编译型语言如果不支持并发,那必然不是一个好的程序员

goroutine

什么是goroutine?

goroutine是Go编程语言中的轻量级执行线程,也是与程序其余部分同时执行的函数。

与传统线程相比,Goroutines 非常轻量,因为创建 goroutine 的开销非常低。因此,它们在 Go 中广泛用于并发编程。

要将函数作为 goroutine使用,请使用关键字:go

好了,以上是官方对于goroutine的解释,那么我们再看看go关键字

go关键字

如果我们要使用goroutine,那么就在函数或者方法之前加上go关键字就可以了,比如:

go runGoroutine()

匿名函数也可以使用go关键字去执行,比如:

go func(){
    // 做点啥 ...
}()

来个goroutine

我们写一个函数:

// author: mars酱
func helloGoroutine() {
	fmt.Println("hello goroutine...")
}

然后我们去调用它:

// author: mars酱
func Test_goroutine2(t *testing.T) {
	go helloGoroutine()
	fmt.Println("你好,mars酱")
}

运行的结果:

Go | 一分钟掌握Go | 8 - 并发_Go

正常运行!

首先执行了主函数中的中文输出,再执行了goroutine中的英文输出,那么,为什么?

为什么

因为go程序在创建goroutine的时候需要开销,而主函数也是一个goruntine,所以优先中文输出,再执行的新创建的goroutine。大家可以理解为异步,我来补个图:

Go | 一分钟掌握Go | 8 - 并发_Go_02

将就着看吧,画图实在是不太行。

标签:函数,关键字,goroutine,一分钟,并发,go,mars,Go
From: https://blog.51cto.com/marsz/6230547

相关文章

  • google play 内购数据拉取
    拉取googleplayconsole后台内购数据收入。1:查看官方文档: https://support.google.com/googleplay/android-developer/answer/6135870?visit_id=638180953496505768-3845517287&p=stats_export&rd=1#export这里采用 从GoogleCloudStorage下载报表-》使用用户端程式库和......
  • 发格(Fagor)机床数据采集
    #一、机床IP如何设置##步骤一、找到设置IP的界面【机床参数】》【串口/以太网】》【以太网】如下图所示页面 ##步骤二、设备IP选择P24参数,点击【修改】按钮,输入P24=IP其他的参数也如上设置。参数说明如下: ##步骤三、完成设置完成设置后,需要断电重启机床#二、以太网......
  • Golang 并发&同步的详细原理和使用技巧
    Golang并发概要说明并发模型Golang的并发模型属于一种很典型的CSP(communicatingsequentialprocesses)并发模型,其核心是不要通过共享内存来通信,而应该通过通信来共享内存。具体实现,就是通过goroutine来实现并发,然后并发的goroutine之间通过Channel来进行通信;为此,Gola......
  • pymongo工具类
    fromitemadapterimportItemAdapterimportpymongoclassMongo_Client(object):def__init__(self,collection_name):self.clinet=pymongo.MongoClient("x",username='x',password='x',......
  • go slice使用
    1.简介在go中,slice是一种动态数组类型,其底层实现中使用了数组。slice有以下特点:*slice本身并不是数组,它只是一个引用类型,包含了一个指向底层数组的指针,以及长度和容量。*slice的长度可以动态扩展或缩减,通过append和copy操作可以增加或删除slice中的元素。*slice的容量是指在......
  • 【单例设计模式原理详解】Java/JS/Go/Python/TS不同语言实现
    简介单例模式(SingletonPattern)属于创建型设计模式,这种模式只创建一个单一的类,保证一个类只有一个实例,并提供一个访问该实例的全局节点。当您想控制实例数目,节省系统资源,并不想混用的时候,可以使用单例模式。单例有很多种实现方式,主要分为懒汉和饿汉模式,同时要通过加锁来避免线程......
  • Go Web学习笔记--处理表单的输入
    通过一个注册的示例来演示如何通过Go语言来处理表单的输入。首先,创建一个简单的html文件,代码如下:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><formaction="/log......
  • go----day03()
    面试sortlist.sort昨日回顾#1go基础数据类型 -数字:整数,正整数,浮点数,复数-字符串:""``-单引号引起来的,只能放一个字符a中 -实际上是数字表示20013-默认是int32实际上是rune-也可定义为byte类型或uint8类型-......
  • SpringBoot配置MongoDb
    MongoDb建表:MongoDB不需要建表,直接插入数据就会建表。日期用ISODate()转换。db.getCollection("mongoDbTest").insert({userId:"dxcefg",status:1,price:1.23,updateTime:ISODate("2022-02-13T07:06:25.371Z")})添加maven依赖:<dependency>......
  • Django框架——ORM执行SQL语句、神奇的双下划线、外键字段的创建、跨表查询、进阶操作
    ORM执行SQL语句有时候ORM的操作效率可能偏低我们是可以自己编写SQL的方式一: models.User.objects.raw('select*fromapp01_user')方式二: fromdjango.dbimportconnectioncursor=connection.curson()cursorexecute('selectnamefromapp01_user')prin......