最新文章
    Golang锁-Mutex的用法
    Golang锁-Mutex的用法

    因为并发编程中有竞争条件和数据竞争的问题,我们才需要将代码片段设定为临界区,通过使用Mutex等同步原语将临界区保护起来。接下来,我们来熟悉Go标准库的Mutex 的使用方法,看看它是如何保护临界区,解决竞争条件和数据竞争的问题的。

    一个并发问题

    有时候,我们很清楚地知道临界区或者共享资源,能主动地发现数据竞争问题;但是有时候,数据竞争问题却不那么容易被发现,比如下面这段代码,你认为有数据竞争

    竞争条件与数据竞争
    竞争条件与数据竞争

    竞争条件和数据竞争是两个相关的概念,它们都涉及多线程环境中的数据竞争。但是,它们也有如下一些重要的区别。

    • 竞争条件:指的是在多线程环境中,由于操作顺序的不确定性导致的程序执行结果的不确定性。例如,如果两个线程同时对同一个变量进行读/写操作,那么它们的执行顺序将会对最终的结果产生影响。这就是竞争条件。外部时序或排序的非确定性会产生竞争条件;典型的示例包括上下文切换、操作系统信号、多处理器上的内存操作和硬件中断等。竞争
    Go运行时调度器
    Go运行时调度器

    了解Go运行时对goroutine的调度,对于深入分析和理解并发程序还是很有帮助的。

    当操作系统的线程切换到另一个线程时,CPU会执行一个操作,叫作上下文切换(context switch),操作系统会在中断、系统调用时执行线程上下文切换。线程上下文切换是一种昂贵的操作,因为操作系统需要将用户态转移到内核态,保存要切换线程的执行状态,也就是将一些重要寄存器的值和进程状态保存在线程控制块数据结构中。当恢复线程的运行时,需要将这些状态加载到集群中,从内核态转移到用户态。想想就比较复杂、耗时,如果又涉及进程上下文切换,就更加耗时了。goroutine的调度是由Go运行时控制的,每个编译的Go程序都

    Go并发并不一定最快
    Go并发并不一定最快

    一般来说,正如我们平常理解的那样,将串行程序修改为并行程序之后,其性能会得到提升。但也不是绝对的,在某些情况下,串行编程性能反而更好。

    下面这个例子是快速排序的串行实现。

    // 快速排序中的分区,把a分成左右两部分,左边部分小于右边部分
    func partition(a []int, lo, hi int) int {
    	pivot := a[hi] // 将最后一个值作为分界值
    	i := l
    
    1/6/2026golang并发
    阿姆达尔定律:并发编程优化是有上限的
    阿姆达尔定律:并发编程优化是有上限的

    阿姆达尔定律(Amdahl's Law,Amdahl's Argument),计算机科学界的一个经验法则,因IBM公司计算机架构师吉恩·阿姆达尔而得名。阿姆达尔曾致力于并行处理系统的研究,他进行了一项富有洞察力的观察:提升系统的一部分性能对整个系统的性能有多大影响。这一观察被称为阿姆达尔定律:

    当提升系统的一部分性能时,对整个系统性能的影响取决于:

    • 这一部分有多重要。
    • 这一部分性能提升了多少。

    1/5/2026并发
    并发vs并行
    并发vs并行

    并发是同时处理很多事情,并行是同时做很多事情。

    并发是同时处理很多事情,有时间段的概念,这些事情可能会有一个先后顺序,但是会在这个时间段内去做。从这个时间段来看,这些事情都被处理了。

    比如我在编写代码的同时还在听着音乐,这两件事情如果被调度在同一个CPU上,它们是并发执行的。

    并行是在同一个时间点有多件事情都在做。如果手头阔绰,我还可以买一台机器放在旁边,打开Markdown编辑器编写文章的内容,同时音乐播放器在播放抖音上最流行的歌曲。这两台服务器可以并行地执行,在同一个时刻,两台服务器都在做着事情,这是并行。

    并发和并行并不相同,但是相关。如图,左边并发,右边并行。 ![并发vs并行

    1/3/2026并发并行
    适合并发编程的语言Golang
    适合并发编程的语言Golang

    当今很多高级编程语言都支持并发编程,但是Go语言绝对是很特殊的那一个,一开始它就从语言设计上为并发编程提供了最简单的方式,并且设计了对线程更轻量级的goroutine,还为CSP模型提供了容易使用的channel类型,并将其作为内建类型直接提供。

    2019年,在Go Time对Rob Pike和Robert Griesemer的访谈节目中,Rob Pike 谈到发明Go语言的想法时说道,“我们听到了一个C++新版本发

    1/2/2026golang并发
    2026最新欧易(OKX)注册全攻略:图文实操
    2026最新欧易(OKX)注册全攻略:图文实操

    本指南将带您完成注册,注册链接获得欧易系统最高等级的费率折扣。

    第一步:点击邀请注册链接https://www.nqfaxzrusob.com/join/49407972

    进入注册页面:

    第二步:选择国家/地区 第三
    2026最新币安(Binance)注册全攻略:图文实操+永久20%返佣锁定
    2026最新币安(Binance)注册全攻略:图文实操+永久20%返佣锁定

    在加密货币交易中,手续费是每个投资者最容易忽视的“隐形成本”。很多新手在注册时没有填写推荐码,导致长期多交大量费用。

    本指南将手部分带您完成注册,并告诉您如何通过邀请码C0PFNDGH获得币安系统最高等级的费率折扣。

    🛑为什么要使用邀请码 C0PFNDGH 注册?

    相比于直接在官网或应用商店盲目注册,使用专属邀请码C0PFNDGH注册,您将立即获得

    • 永久交易返现:你每进行一笔笔现货交易,系统会自动将20%的手续费实时返还到你的账户。这意味着你的交易成本直接打8折。
    • 新用户奖励最高可达 500 USD
    • 终身赠与:这个优惠不是一次性的,只要你的账号在交易,这20%的省钱通道就永远