二十四、goroutine

2024-08-26 11:04
文章标签 二十四 goroutine

本文主要是介绍二十四、goroutine,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、并发与并行

二、阻塞与非阻塞

1、模拟一个阻塞方法

 2、使用goroutine进行并发处理

三、关于goroutine的性能


一、并发与并行

理解:举个通俗的例子来理解两者之间的区别,在自己家同时制作多个蛋糕叫并发,与朋友家一起制作,制作完成后汇集在一起叫做并行。

二、阻塞与非阻塞

1、模拟一个阻塞方法

import ("fmt""time"
)func timeSleep() {time.Sleep(time.Second * 5)
}
func main() {timeSleep()fmt.Println("wait timeSleepFunc")
}

在上述代码中使用time包中的sleep方法,让程序暂时停止5秒,再执行下面的print方法

 2、使用goroutine进行并发处理
import ("fmt""time"
)func timeSleep() {time.Sleep(time.Second * 5)fmt.Println("time sleep finished")
}
func main() {go timeSleep()fmt.Println("end end end")
}

这里的goroutine正好写为go

可以发现不需要再等待5秒再执行下面的方法了,同时我们也看不到方法timeSleep的返回结果了。因为goroutine直接执行后面的代码后理解返回,没有其他程序阻止的话就执行完毕后结束,所以如果我们想看到timeSleep方法执行结果可以再添加一个sleep方法阻止退出

import ("fmt""time"
)func timeSleep() {time.Sleep(time.Second * 5)fmt.Println("time sleep finished")
}
func main() {go timeSleep()fmt.Println("end end end")time.Sleep(time.Second * 6)
}

这里我们就可以看到timeSleep方法的返回结果

三、关于goroutine的性能

与java一样,go在幕后使用线程来并发管理,但是不需要直接管理线程,创建一个goroutine只需要占用几kb的内存,另外销毁的效率也非常的高。

这篇关于二十四、goroutine的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108374

相关文章

(二十四)Java 面向对象之接口

目录 一. 前言 二. 接口的声明 三. 接口的实现 四. 接口的继承 4.1. 单继承 4.2. 多重继承 五. 标记接口 六. 总结 七. 课后习题 一. 前言     接口(英文:Interface),在 JAVA 编程语言中是一个抽象类型,是抽象方法的集合,接口通常以 interface 来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

golang基础-goroutine初识、chan存取、goroutine和chan相结合、关闭chan、range取、单元测试

goroute初识channel存取开启goroute实现chan之间的同步存取channel关闭range 单元测试 goroute初识 package mainimport ("fmt"// "os""time")func test(){var i int for {fmt.Println(i)time.Sleep(time.Second)i++}}func

ARM32开发——(二十四)电源管理单元

1. 重点 了解什么是电池管理单元PMU了解ARM32中的电源域了解几种省电模式 2. 主要内容 2.1 PMU PMU全称Power Management Unit,电源管理单元。 2.2 电源域 总共有三大电源域,包括VDD / VDDA域,1.2V域和备份域。 2.2.1 VDD/VDDA域 VDD/VDDA域如下图: 提供PMU 常规电源供应以下模块的供电

剑指Offer之二十四-二叉搜索树的后序遍历序列

题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回ture,否则返回false。假设输入的数组的任意两个数字都互不相同。 解析 找到根结点从头遍历序列,第一个比根结点大的元素为右子树的起点判断右子树是否都比根结点大,若不是返回false,若是,进行下一步分别把左子树和右子树都以上面规则进行判断,若左右子树都能返回true,则整个序列为二叉搜索树的后序遍历序

4-golang协程(goroutine)和管道(channel)

4-golang协程(goroutine)和管道(channel) 1. 并发和并行 多线程程序在单核上运行,就是并发 多线程程序在多核上运行,就是并行 2. go协程和线程 Go主线程(也可以称为线程,可以理解为进程):一个Go线程上可以起多个协程,协程是轻量级的线程Go协程的特点 有独立的栈空间共享程序堆空间调度由用户控制协程是轻量级的线程 func test() {for i

从零基础学Go(九)——Go的Goroutine

简介📃 Go语言(简称Go)是由谷歌公司开发的一种静态强类型、编译型、并发型的编程语言。Go语言的一个显著特点就是对并发编程的良好支持,而Goroutine则是实现这一特性的重要基础。Goroutine可以看作是Go语言中的轻量级线程,它可以帮助开发者轻松实现并发任务,从而更高效地利用多核处理器的能力。 关于计算机中的并发相关知识基础同学们可以参考我的上一期文章 全栈杂谈第一期:什么是计算机

Golang计算单个Goroutine占用内存

一直在想单个Goroutine大概占用多少内存呢?今天无意间在《Concurrency Go》中看到了这段计算单个Goroutine内存占用大小的代码,分享给同样有迷惑人。 在Win7 Go1.9环境,大概是8.9KB~9.1KB,确实够小的。。。 package mainimport ("fmt""runtime""sync")func getGoroutineMemConsume() {

关于goroutine的一些小理解

前言 今天看一个大神的代码,看到了runtime.Gosched(),瞬间把我看懵了。。 后面梳理了下,其实这个竟然之前学习goroutine的时候没学到,所以顺便记录下,以便日后留恋。 知识点 理解这个goroutine必须要知道以下三大块东西。 进程、线程、协程并发、并行Golang中的M、P、G 我会用非常通熟易懂的方式来进行说明。(我也怕很烦的解释,不利于记忆啊!) 进程、

springboot学习(二十四) springboot整合cxf jaxrs发布webservice使用JSON并调用

例子github地址:https://github.com/zhuquanwen/webservice-demo 其中的cxf模块 1、依赖 我使用的是gradle,使用maven转为对应的pom.xml就好 plugins {id 'java'}group 'com.zqw.test.client'sourceCompatibility = 1.8repositories {maven {

Python基础教程(二十四):日期和时间

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝💝💝如有需要请大家订阅我的专栏【Python系列】哟!我会定期更新相关系列的文章 💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!! 文章目录 引言一、基础概念与库介绍1.1 datetime 模