聊聊并发编程,另送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折还稍微便宜一点点。点击下面的链接选择下单即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据分析基础之《pandas(2)—基本数据操作》

一、读取一个真实的股票数据 1、读取数据 # 基本数据操作 data pd.read_csv("./stock_day.csv")data# 删除一些列,使数据简洁点 data data.drop([ma5,ma10,ma20,v_ma5,v_ma10,v_ma20], axis1)data 二、索引操作 1、numpy当中我们已经讲过使用索引选取…

Unity 读取指定目录所占内存大小

public static class TxxTool{#region 读取文件大小private static List<string> DirList new List<string>();public static long GetFileSize(string path){DirList new List<string>();DirList.Add(path);GetAllDirecotries(path);long fileSize 0;for…

蓝桥杯省赛无忧 课件87 01tire

01 算法概述 02 问题引入 03 算法分析 04 例题

ReactNative实现的横向滑动条

OK,我们先看下效果图 注意使用到了两个库 1.react-native-linear-gradient 2.react-native-gesture-handler ok,我们看下面的代码 import {Image, TouchableWithoutFeedback, StyleSheet, View} from react-native; import LinearGradient from react-native-linear-grad…

开源软件:技术创新与应用的推动力量

文章目录 每日一句正能量前言开源软件如何推动技术创新开源软件的历史开源软件的开发模式开源软件与闭源软件源代码和开发许可维护特点、支持和成本开源软件的优势减少开支可定制性快速创新发展透明度和安全性 开源软件的应用 常见问题后记 每日一句正能量 不好等待运气降临&am…

vue3-自定义指令

自定义指令 vue 除了内置的制指令&#xff08;v-model v-show 等&#xff09;之外&#xff0c;还允许我们注册自定义的指令。 vue 复用代码的方式&#xff1a; 组件&#xff1a;主要是构建模块。 组合式函数&#xff1a;侧重有状态的逻辑。 自定义指令&#xff1a;主要是为…

大模型ReAct提示工程详解【2023】

普林斯顿大学的教授和谷歌的研究人员最近发表了一篇论文&#xff0c;描述了一种新颖的提示工程方法&#xff0c;该方法使大型语言模型&#xff08;例如 ChatGPT&#xff09;能够在模拟环境中智能地推理和行动。 这种 ReAct 方法模仿了人类在现实世界中的运作方式&#xff0c;即…

欧洲的编程语言三巨头,只剩下一位了!

能把三位大牛的名字都叫出来的人恐怕不多吧&#xff1a; 这三位都是图灵奖获得者&#xff0c;他们的名字和发明散布在各种教科书中&#xff0c;从左到右&#xff0c;依次是&#xff1a; 尼克劳斯沃斯 (Niklaus Wirth) 瑞士人&#xff0c;一生发明了8种编程语言&#xff0c;其中…

CTF赛三层内网渗透

CTF赛三层内网渗透 前言 2019某CTF线下赛真题内网结合WEB攻防题库&#xff0c;涉及WEB攻击&#xff0c;内网代理路由等技术&#xff0c;每台服务器存在Flag&#xff0c;获取一个Flag对应一个积分&#xff0c;获取三个Flag结束。 第一关 Taget1_centos7 1、访问目标网页 发现…

AIGC 为何能火爆全网,赋能智能时代?

Hi&#xff0c;大家好&#xff0c;我是半亩花海。2023年&#xff0c;人工智能新浪潮涌起&#xff0c;AIGC 火爆全网&#xff0c;不断赋能各大行业。从短视频平台上火爆的“AI 绘画”&#xff0c;到智能聊天软件 ChatGPT&#xff0c;都引起了大家的广泛关注。那么 AIGC 到底是什…

浙政钉访接口:k8s+slb容器日志报错(:Temporary failure in name resolution。)

在此我只能说兄弟&#xff0c;浙政钉的扫码接口和用户详情返回这两个接口是不需要白名单的&#xff0c; 我们文明人先确定一件事就是&#xff0c;你代码本地能调用到浙政钉返回。ecs服务器curl浙政钉也通的&#xff1a; 这时候和你说要开通白名单的&#xff0c;请放开你的道德…

r0下进程保护

简介 SSDT 的全称是 System Services Descriptor Table&#xff0c;系统服务描述符表。这个表就是一个把 Ring3 的 Win32 API 和 Ring0 的内核 API 联系起来。SSDT 并不仅仅只包含一个庞大的地址索引表&#xff0c;它还包含着一些其它有用的信息&#xff0c;诸如地址索引的基地…

如何强制关掉系统或应用程序?这里提供详细方法

总的来说,Windows相当可靠,但有时会挂断并崩溃。我们如何在最少麻烦的情况下重返工作或游戏?为此,我们需要强制退出操作系统。 在本教程中,我们将向你展示如何在最坏的情况下安全关闭或重新启动计算机。我们还将向你展示如何在不触摸鼠标的情况下强制关闭应用程序和快速关…

【51单片机】开发板和单片机的介绍(2)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

挖矿系列:细说Python、conda 和 pip 之间的关系

继续挖矿&#xff0c;挖金矿&#xff01; 1. Python、conda 和 pip Python、conda 和 pip 是在现代数据科学和软件开发中常用的工具&#xff0c;它们各自有不同的作用&#xff0c;但相互之间存在密切的关系&#xff1a; Python&#xff1a;是一种解释型、面向对象的高级程序设…

【数据集】全国地级市-平均受教育年限-男、女数据集(2000-2020年)

平均受教育年限用以衡量地区的人力资本&#xff0c;指对一定时期、一定区域某一人口群体接受学历教育的年数总和的平均值。参考陈熠辉&#xff08;2023&#xff09;等人的计算方式&#xff0c;根据第五次人口普查、第六次人口普查、第七次人口普查结果整理了地级市的平均受教育…

CentOS下安装vlc

一、引言 vlc是一跨多媒体播放器&#xff0c;可以播放本地媒体文件和网络串流&#xff0c;帮助我们排查音视频开发过程中遇到的问题。大部分情况下&#xff0c;我们只需要在Windows系统下安装vlc就可以了。但有一种情况是需要在Linux下安装vlc的&#xff1a;我们的音视频拉流软…

2024美赛C题完整解题教程及代码 网球运动的势头

2024 MCM Problem C: Momentum in Tennis &#xff08;网球运动的势头&#xff09; 注&#xff1a;在网球运动中&#xff0c;"势头"通常指的是比赛中因一系列事件&#xff08;如连续得分&#xff09;而形成的动力或趋势&#xff0c;这可能对比赛结果产生重要影响。球…

打开率超90%的开发信标题,原来要这样写

写开发信时&#xff0c;邮件标题的撰写尤为重要&#xff0c;买家收到邮件的时候&#xff0c;在手机或其它移动设备上弹出来的信息就是邮件标题和正文第一句话。 好的标题能吸引买家打开邮件&#xff0c;开启高回复率的第一步&#xff0c;下面给大家介绍一下如何撰写高打开率的开…

Linux网络通信——TCP/OSI七层模型/TCP/IP(五层或四层模型)/HTTP报文传输原理

文章目录 消息的传输什么是OSI七层模型OSI七层模型的内容物理层&#xff08;Physical Layer&#xff09;&#xff1a;数据链路层&#xff08;Data Link Layer&#xff09;&#xff1a;网络层&#xff08;Network Layer&#xff09;&#xff1a;传输层&#xff08;Transport Lay…