聊聊并发编程,另送5本Golang并发编程新书

大家好,我是飞哥!

并发编程并不是一个新话题,但是我觉得在近几年以及未来的时间里,并发编程将显得越来越重要。

为什么这样讲,让我们先回到一个基本的问题上来,为什么我们要采用并发编程?关于这个问题可能会有多种答案,但是最根本的答案是受 CPU 硬件发展的影响。

摩尔定律原意说的是每隔 18 个月处理器的速度会翻一翻。从 1970 年到 2002 年的这段时间里,硬件确实大致是按照这个规律发展的。

但是进入到 2002 年之后,CPU 硬件的发展已经触达到了物理的极限,主频发展到 3.0 GHz 之后就开始已经原地踏步了,直到今天绝大部分 CPU 硬件的主频仍然是在这个频率附近徘徊。

但是软件的发展对算力的要求仍然在逐年提高,CPU 硬件厂商也要继续进步,怎么办?

接下来 CPU 硬件的发展就开始朝着另一个方向来发展,那就是在一台服务器内塞进更多的 CPU 核。手段有如下几个

  • 在单 CPU 架构内设计实现更多的物理核

  • 通过超线程技术将一个物理核当成两个核来用

  • 在一台服务器内通过 QPI/UPI 总线互联实现安装多个 CPU

拿单 CPU 架构设计来举例,我在深入了解服务器 CPU 的型号、代际、片内与片间互联架构中提到过,在 Intel 2015 年的 Broadwell 代际的服务器 CPU 中,采用的 Ring 架构就实现了单颗 CPU 塞进去 24 个物理核。

后来到了 2017 年后的 Skylake 、Cascade Lake,以及 2021 年的 ice lake 架构,都采用更高效的 mesh 多核互联新架构,将单 CPU 中物理核的数量提升到了 40 核。

AMD 的多核发展同样是如火如荼,在 AMD Zen 架构的 EPYC 9000 系列更是设计出了 92 的超高物理核核数。

以上各种手段带来的最终的结果就是一台服务器上 CPU 的主频虽然没有进步,但是编程可用的核越来越多。这对应用的编程也带来了新的挑战

  • 如何对应用逻辑进行并行化拆分

  • 如何更轻量地实现并行

  • 如何解决并行过程中出现的锁竞争的问题

  • 如何设计线程安全且高效的数据结构

  • 如何实现原子操作避免并发影响

基于以上问题,Go 语言之父 Rob Pike 一直认为 C++ 缺乏对新的多核机器的支持,他想尝试把多年来自己对并发编程的理解实现出来。所以 Go 语言的初衷就是让大家很方便地进行并发编程。

最近我的好友晁岳攀新出了一本《深入理解 Go 并发编程》,非常详尽地对 Go 语言中的并发技术点进行了阐述。

我和他要了 5 本,作为福利送给咱们的读者。中奖方式规则如下:

  • 评论区点赞前3名自动获得,

  • 另外两本由我在评论区选取两条优质评论

  • 为了防止灌水,评论字数需要大于10个字

  • 评论点赞时间截止时间到明天(2月3日)中午12:00

晁岳攀大佬网名鸟窝,是知名微服务框架rpcx的作者,2019 年也在极客时间上开办了专栏《Go 并发编程实战课》作者。前微博技术专家,目前就职于百度。

提到 Go 并发编程,一个常见的认识是 gorutine、select、channel 三件套。但其实从更全面的视角来看的话,Go 语言运行时中并发编程中相关的技术点很多,例如:

  • 互斥锁Mutex:用于控制多线程对共享资源的竞争访问同步机制。

  • 读写锁RWMutex:读写锁是一种对互斥锁Mutex的优化,可以允许多个gorutine同时读数据

  • WaitGroup:用于解决并发等待问题,用于在某个任务完成后再开始处理其它任务的任务编排

  • 条件等待Cond:当条件满足时唤醒一个或多个gorutine

  • 单例模式Once:用来执行仅仅执行一次的操作

  • 线程安全的Map:线程安全的sync.Map的使用方式以及实现原理

  • 对象池sync.Pool:通过池有效地减少对新对象的申请,提高程序性能

  • 原子操作atomic: 原子操作的使用场景和实现原理

  • 通道Channel:channle与gorutine一起提供了更优雅的并发编程方式

这本书对这些知识点全方位进行了阐述,这本书的目录如下:

4992bea8c4940d859e03efdddf6348bb.png

这本《深入理解 Go 并发编程》我觉得区别于其它的 Go 语言的书籍的特点是不光光讲这些技术怎么使用,还都从实现的角度分析了它们在底层是如何实现的。这是我个人比较喜欢的风格。只有这样才能真正对一个技术点理解通透。

比如对于互斥锁 Mutex,晁老师是从各个历史版本开始一直介绍到最新的 Mutex 的实现。

a257d5c95c2d71a4bf0f4f4222cbb7e0.png

这本书加入了大量精美的插图,使用卡通 Gopher 造型,结合中国传统造型,读者阅读起来会觉得趣味横生。

069ede00e63f45cda6c8a0c7615aaad3.png

没有中奖的同学也不要灰心,原价158,给大家要到的价格是74元,比5折还稍微便宜一点点。点击下面的链接选择下单即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/451006.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s之安装部署及kuboard发布应用

目录 环境准备 系统规划 配置免密 将桥接的IPv4流量传递到iptables的链 系统基础配置 安装docker 安装docker及基础依赖 配置docker的仓库下载地址 部署k8s 添加阿里云的k8s源 安装kubeadm,kubelet和kubectl 初始化masteer节点 部署node节点 部署flanne…

OpenSSL:configure: error: OpenSSL library not found解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

springboot153相亲网站

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【Redis】整理

对于现代大型系统而言,缓存是一个绕不开的技术话题,一提到缓存我们很容易想到Redis。 Redis整理,供回顾参考

PHP漏洞查询

CVE - Search CVE List (mitre.org) 美国国家漏洞数据库(需要梯子) NATIONAL VULNERABILITY DATABASE NVD - Search and Statistics (nist.gov) 基本都能查询到,传结果详情页里面会有一些解决方案的连接 PHP的官方网站 PHP :: Bugs :: Se…

【annie/lux 快速下载哔哩哔哩视频】全网最简单,只需要5步!!!

1.首先 现在annie更名为lux 官网地址:https://github.com/iawia002/lux/releases 2.进入官网之后如图所示 3.下载lux软件 4.下载lux 这里需要说明一下 如果不下载这个的话也可以下载视频 但是视频和音频是分开的,你的视频没有声音 5.下载视频

从宏观上对人工智能(AI)的一些理解

1.人工智能概述 68年前,约翰麦卡锡在“达特茅斯会议”正式提出人工智能概念。直到2023年,ChatGPT掀起全球AI大模型浪潮,英伟达市值一年飙涨2.4倍,真正意义上的“人工智能元年”到来了。 提到人工智能&#x…

【信息抽取 YYDS!】KnowLM:知识图谱 + 大模型,实现更有效的信息抽取和知识管理

KnowLM 知识图谱 大模型:实现信息抽取 KnowLM 原理KnowLM 部署KnowLM 应用1. 命名实体识别(NER)2. 关系抽取(RE)3. 事件抽取(EE) KnowLM 原理 代码:https://github.com/zjunlp/Kno…

隧道穿透:常规反弹、加密反弹

目录 1、常规反弹 (1)Windows正向连接shell (2)Windows反向连接shell (3)Linux正向连接shell (2)利用Linux自带bash反弹Shell 2、加密反弹 1、常规反弹 假设在内网环境中发现…

GPGPU面临的工程困境闲聊

作者:蒋志强 本人同意他人对我的文章引用,但请在引用时注明出处,谢谢.作者:蒋志强 0.前言 2007年作为GPGPU的工程界元年至今,已经发展了接近小二十年了。这个领域是如此的重要,几乎影响了工业…

LangChain 81 LangGraph 从入门到精通三

LangChain系列文章 LangChain 60 深入理解LangChain 表达式语言23 multiple chains链透传参数 LangChain Expression Language (LCEL)LangChain 61 深入理解LangChain 表达式语言24 multiple chains链透传参数 LangChain Expression Language (LCEL)LangChain 62 深入理解Lang…

Python 数据分析(PYDA)第三版(一)

原文:wesmckinney.com/book/ 译者:飞龙 协议:CC BY-NC-SA 4.0 关于开放版本 第 3 版的《Python 数据分析》现在作为“开放获取”HTML 版本在此网站wesmckinney.com/book上提供,除了通常的印刷和电子书格式。该版本最初于 2022 年…