0

0

go语言层面并发什么意思

DDD

DDD

发布时间:2023-06-12 15:11:49

|

981人浏览过

|

来源于php中文网

原创

go语言层面并发的意思是利用go语言在同一时间段内执行多个任务,Go语言的并发通过goroutine实现,goroutine类似线程,属于用户态的线程,可以根据需要创建成千上万个goroutine并发工作。

go语言层面并发什么意思

本文的操作环境:Windows10系统、go1.20版本、dell g3电脑。

go语言层面并发的意思是利用go语言在同一时间段内执行多个任务。

并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发。

并发与并行

立即学习go语言免费学习笔记(深入)”;

并发:同一时间段内执行多个任务(例如:用微信和两个女朋友聊天)。

并行:同一时刻执行多个任务(例如:你和你的朋友都在用微信和女朋友聊天)。

Go语言的并发通过goroutine实现,goroutine类似线程(线程和进程是操作系统引申出的概念,进程相当于一个大的车间,CPU相当于一个工厂,一个工厂里有很多个车间,进程把工厂分为一个个车间。线程是进程下分的,例如工人和各种在进程上的资源。一个进程里至少有一个线程。),属于用户态的线程,我们可以根据需要创建成千上万个goroutine并发工作。goroutine是由Go语言的运行时(runtime)调度完成,二线程是由操作系统调度完成。

Go语言还提供channel(通道)在多个goroutine间进行通信。goroutine和channel是Go语言秉承CSP(提倡通过通信共享内存而不是通过共享内存而实现通信)并发模式的重要实现基础

PHP开发实用指南 2.0
PHP开发实用指南 2.0

对于一个刚进入PHP 开发大门的程序员,最需要的就是一本实用的开发参考书,而不仅仅是各种快速入门的only hello wold。在开发的时候,也要注意到许多技巧和一些“潜规则”。PHP是一门很简单的脚本语言,但是用好它,也要下功夫的。同时,由于PHP 的特性,我一再强调,最NB 的PHP 程序员都不是搞PHP 的。为什么呢?因为PHP 作为一种胶水语言,用于粘合后端 数据库和前端页面,更多需

下载

拓展:

goroutine

类似于线程,在语言层面实现,在操作系统的线程上运行。

一个 goroutine 必定对应一个函数,可以创建多个 goroutine 去执行相同的函数。

在 go中使用 goroutine 很方便,在调用函数时在前面加上go关键字,就可以为一个函数创建一个goroutine 。

启动单个goroutine:

package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup //WaitGroup等待方法
// goroutine demo
func hello(i int){
fmt.Println("Hello hello",i)
wg.Done() //此方法如果运行 ,通知wg把计数器 -1
}
func main() {  // 开启一个主goroutine去执行mian函数
wg.Add(10000)//(计数器)只有一个小弟为1,等待wg.Done()后-1,为0时停止等待
for i:=0; i<10000;i++{
//wg.Add(1) 可以给定10000个goroutine 也可以,每次循环+1
go hello(i) // 开启了一个独立的 goroutine去执行hello这个函数
}
fmt.Println("Hello main")
// 让我们的主goroutine 等待 goroutine 小弟 执行
// 如果不等待,独立的goroutine小弟,可能小弟这个goroutine还没有运行
//time.Sleep(time.Second) 第二种等待
wg.Wait()//等待所有小弟干完活
}

goroutine和线程的区别

OS线程(操作系统线程)一本都有固定的栈内存(通常为2MB),一个goroutine的栈在其生命周期开始时只有很小的栈(典型情况下2KB),goroutine的栈不是固定的,他可以按需增大和缩小,grorutine的栈大小限制可以达到1GB,但极少情况下会到1GB。所以在Go语言中一次创建十万左右的grorutine也是可以的。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

389

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

480

2023.08.10

Go中Type关键字的用法
Go中Type关键字的用法

Go中Type关键字的用法有定义新的类型别名或者创建新的结构体类型。本专题为大家提供Go相关的文章、下载、课程内容,供大家免费下载体验。

233

2023.09.06

go怎么实现链表
go怎么实现链表

go通过定义一个节点结构体、定义一个链表结构体、定义一些方法来操作链表、实现一个方法来删除链表中的一个节点和实现一个方法来打印链表中的所有节点的方法实现链表。

444

2023.09.25

go语言编程软件有哪些
go语言编程软件有哪些

go语言编程软件有Go编译器、Go开发环境、Go包管理器、Go测试框架、Go文档生成器、Go代码质量工具和Go性能分析工具等。本专题为大家提供go语言相关的文章、下载、课程内容,供大家免费下载体验。

246

2023.10.13

0基础如何学go语言
0基础如何学go语言

0基础学习Go语言需要分阶段进行,从基础知识到实践项目,逐步深入。php中文网给大家带来了go语言相关的教程以及文章,欢迎大家前来学习。

697

2023.10.26

Go语言实现运算符重载有哪些方法
Go语言实现运算符重载有哪些方法

Go语言不支持运算符重载,但可以通过一些方法来模拟运算符重载的效果。使用函数重载来模拟运算符重载,可以为不同的类型定义不同的函数,以实现类似运算符重载的效果,通过函数重载,可以为不同的类型实现不同的操作。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

191

2024.02.23

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

8

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.8万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号