• 2024-09-29Go 语言并发编程之互斥锁详解 sync.Mutex
    01 介绍Go标准库sync提供互斥锁Mutex。它的零值是未锁定的Mutex,即未被任何goroutine所持有,它在被首次使用后,不可以复制。我们可以使用Mutex限定同一时间只允许一个goroutine访问和修改临界区。02 使用在介绍怎么使用Mutex之前,我们先阅读`sync.Mutex`源码[1
  • 2024-09-28Go基本语法
    解释文档1:Go基础语法与变量声明packagemainimport( "fmt" "sync" "time")packagemain:每个Go程序必须有一个main包,包含main函数作为程序的入口。import:导入标准库中的包,如fmt、sync和time,用于格式化输出、同步机制以及时间处理。Go与C++对比:Go
  • 2024-09-26Go 语言微服务中的高并发实现
    目录Go语言微服务中的高并发实现一、微服务与高并发的需求二、Go语言的并发优势三、示例:高并发的用户服务微服务(一)定义服务结构体和方法(二)模拟高并发请求四、总结在微服务架构中,高并发处理能力是至关重要的。Go语言以其原生支持并发的特性,在构建高并发微服务方面
  • 2024-09-19探索Go语言中的Goroutine并发机制
    什么是Goroutine在Go语言中,Goroutine是程序中最基本的并发单位。事实上,每个Go程序都会自动创建一个goroutine,那就是主goroutine,程序启动时会立即执行。Goroutine是Go语言中处理并发问题的核心工具,因此理解它的工作原理至关重要。简而言之,Goroutine是并发执行的函数,这些函
  • 2024-09-19深入理解Go并发编程:避免Goroutine泄漏与错误处理
    Go语言以其强大的并发模型和高效的协程(goroutine)而闻名。协程的轻量级和易用性使得并发编程变得更加简单。然而,如果不正确管理协程,可能会导致Goroutine泄漏,从而消耗系统资源,影响程序性能。本文将深入探讨如何避免Goroutine泄漏,并提供实用的代码示例和技巧,帮助您编写更加健壮
  • 2024-09-19Go语言并发编程之Channels详解
    并发编程是Go语言的一大特色,而channel(通道)则是Go语言中用于实现并发的核心工具之一。它源于CSP(CommunicatingSequentialProcesses)的概念,旨在让多个goroutine之间能够高效地进行通信和同步。本文将深入探讨channel的用法、原理和最佳实践,通过丰富的示例代码和详细的解释,帮
  • 2024-09-17GO语言总体讲解与一些代码分析
    目录1.GO语言简介1.1起源与发展1.2语言特性1.3应用场景2.GO语言基础2.1基本语法2.2数据类型2.3控制结构2.4代码分析3.GO语言并发编程3.1Goroutines3.2Channels3.3Syncprimitives4.GO语言代码分析4.1代码组织结构4.2标准库源码分析4.3代码
  • 2024-09-16并发与并行的区别:深入理解Go语言中的核心概念
    在编程中,并发与并行的区别往往被忽视或误解。很多开发者在谈论这两个概念时,常常把它们混为一谈,认为它们都指“多个任务同时运行”。但实际上,这种说法并不完全正确。如果我们深入探讨并发和并行的区别,会发现它不仅是词语上的不同,更是编程中非常重要的抽象层次,特别是在Go语言
  • 2024-09-14Go runtime 调度器精讲(六):非 main goroutine 运行
    原创文章,欢迎转载,转载请注明出处,谢谢。0.前言在Goruntime调度器精讲(三):maingoroutine创建介绍了maingoroutine的创建,文中我们说maingoroutine和非maingoroutine有区别。当时卖了个关子并未往下讲,这一讲我们会继续介绍非maingoroutine(也就是go关键字创建的
  • 2024-09-14Go runtime 调度器精讲(五):调度策略
    原创文章,欢迎转载,转载请注明出处,谢谢。0.前言在第四讲我们介绍了maingoroutine是如何运行的。其中针对maingoroutine介绍了调度函数schedule是怎么工作的,对于整个调度器的调度策略并没有介绍,这点是不完整的,这一讲会完善调度器的调度策略部分。1.调度时间点runtim
  • 2024-09-14Golang并发编程中匿名函数的应用与性能考量
    在Golang并发编程中,匿名函数是一种常见且非常实用的编程工具。匿名函数是指没有名称的函数,可以在函数内部定义和使用,或者作为参数传递给其他函数。这种方式不仅简化了代码结构,还能增强代码的灵活性,尤其在并发编程中,匿名函数的使用更能展现其优势。不过,如何合理使用匿名函数并在实
  • 2024-09-13Go runtime 调度器精讲(四):运行 main goroutine
    原创文章,欢迎转载,转载请注明出处,谢谢。0.前言皇天不负有心人,终于我们到了运行maingoroutine环节了。让我们走起来,看看一个goroutine到底是怎么运行的。1.运行goroutine稍微回顾下前面的内容,第一讲Go程序初始化,介绍了Go程序是怎么进入到runtime的,随之揭开runti
  • 2024-09-13Go简介
    一.Go语言简介Go(Golang)是由谷歌开发的一种开源编程语言,于2009年首次发布。Go结合了C语言的简洁性和现代编程语言的高效性,具有并发性强、编译速度快、内存管理自动化等特点。它最初是为了解决谷歌在处理大规模服务器软件上的编程问题而设计的,目标是让工程师能够快速开发、部
  • 2024-09-13常见的并非模型
    在并行编程中,处理循环迭代时常用的并发模型有几种:WorkerPool(工作池):描述:创建固定数量的工作goroutine,这些goroutine从共享的任务队列中获取任务并执行。优点:控制并发量,避免过多goroutine导致资源耗尽。示例:packagemainimport("fmt""sync")
  • 2024-09-13Go runtime 调度器精讲(三):main goroutine 创建
    原创文章,欢迎转载,转载请注明出处,谢谢。0.前言回顾下上一讲的内容。主线程m0蓄势待发,准备干活。g0为m0提供了执行环境,P和m0绑定,为m0提供活,也就是goroutine。那么问题来了,活呢?哪里有活给m0干?这一讲我们将介绍m0执行的第一个活,也就是maingoroutine。maingou
  • 2024-09-12golang 中的 sync.WaitGroup
    sync.WaitGroup是Go标准库中的一个同步原语,用于协调多个goroutine的执行,确保它们在主线程或其他goroutine继续执行之前完成任务。sync.WaitGroup的用法1.创建WaitGroup实例在开始goroutine执行之前,需要创建一个WaitGroup实例。这个实例将用于跟踪正在运行的goro
  • 2024-09-12为什么需要用到channel
    Channel是Go语言中并发编程的核心工具之一,主要用于解决以下问题:1.数据传递和通信在并发编程中,不同的goroutine可能需要交换数据。使用channel可以安全地在goroutine之间传递数据,而无需显式地使用锁。channel提供了类型安全的通信机制,使得数据传输既简洁又安全。2.
  • 2024-09-12什么是golang中的channel
    在Go语言中,channel是一种用于在goroutine之间进行通信和同步的工具。它允许一个goroutine发送数据到channel,另一个goroutine从channel接收数据,从而实现并发编程中的数据交换。 Channel的关键特性类型安全:每个channel都有一个指定的类型,确保发送到channel的
  • 2024-08-25golang mutex原理
    最近面试遇到问锁的问题,答得不是很好,重新做一下总结梳理 go中的sync包提供了两种锁的类型,分别是互斥锁sync.Mutex和读写锁sync.RWMutex,这两种锁都属于悲观锁饥饿模式与正常模式在下面的内容会经常涉及到一个概念,饥饿模式,这里先简单说一下1.正常模式(非公平锁)正常模式下,所
  • 2024-08-23Go如何获取goroutineId
    runtime包packagemainimport("bytes""log""os""runtime""strconv""time")funcgetGoroutineID()uint64{b:=make([]byte,64)b=b[:runtime.Stack(b,false
  • 2024-08-19深入理解 Go 语言原子内存操作
            原子内存操作提供了实现其他同步原语所需的低级基础。一般来说,你可以用互斥体和通道替换并发算法的所有原子操作。然而,它们是有趣且有时令人困惑的结构,应该深入了解它们是如何工作的。如果你能够谨慎地使用它们,那么它们完全可以成为代码优化的好工具,而不会增加
  • 2024-07-30深入解析 Go 语言 GMP 模型:并发编程的核心机制
    前言本章是Go并发编程的起始篇章,在未来几篇文章中我们会围绕Go并发编程进行理论和实战的学习,欢迎关注我哦!本章主要以介绍GMP模型为主,偏向于面试和八股,目的是让小伙伴们注重于知识本身,面向面试,面向八股,面向加薪。Go语言自诞生以来,就以其简洁、高效的并发模型著称。而这其中的核
  • 2024-07-29【Golang 面试 - 进阶题】每日 3 题(三)
    ✍个人博客:Pandaconda-CSDN博客
  • 2024-07-28【Golang 面试 - 进阶题】每日 3 题(三)
    ✍个人博客:Pandaconda-CSDN博客
  • 2024-07-23交替打印数字和字母
    /*问题描述使用两个goroutine交替打印序列,一个goroutine打印数字,另外一个goroutine打印字母,最终效果如下:12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728*/funcQuestionOne(){ numChan,letterChan:=make(chanstruct{}),make(ch