聊聊并发编程,另送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一起提供了更优雅的并发编程方式
这本书对这些知识点全方位进行了阐述,这本书的目录如下:

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

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

没有中奖的同学也不要灰心,原价158,给大家要到的价格是74元,比5折还稍微便宜一点点。点击下面的链接选择下单即可。
相关文章:
聊聊并发编程,另送5本Golang并发编程新书
大家好,我是飞哥! 并发编程并不是一个新话题,但是我觉得在近几年以及未来的时间里,并发编程将显得越来越重要。 为什么这样讲,让我们先回到一个基本的问题上来,为什么我们要采用并发编程?关于这…...
Jgit Packfile is truncated解决方案
配置方式解决 这两个配置选项是用于提高 SSH 连接稳定性的 SSH 客户端配置参数,它们被添加到 SSH 配置文件(通常是 ~/.ssh/config)中。这些参数有助于在网络不稳定或者长时间无数据交换时保持 SSH 连接不被断开。下面是每个参数的具体作用&am…...
为后端做准备
这里写目录标题 flask 文件上传与接收flask应答(接收请求(文件、数据)flask请求(上传文件)传递参数和文件 argparse 不从命令行调用参数1、设置default值2、"从命令行传入的参数".split()3、[--input,内容] …...
地下停车场智慧监查系统:科技让停车更智能
随着城市化进程的加速,停车难成为了许多城市居民的痛点。而地下停车场作为解决停车难问题的重要手段,其安全性和便捷性也成为了人们关注的焦点。为了解决这一问题,山海鲸可视化搭建的地下停车场智慧监查系统应运而生,为车主们提供…...
LeetCode每日一题 | 1696. 跳跃游戏 VI
文章目录 题目描述问题分析程序代码 题目描述 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一开始你在下标 0 处。每一步,你最多可以往前跳 k 步,但你不能跳出数组的边界。也就是说,你可以从下标 i 跳到 [i 1, min(…...
大型装备制造企业案例分享——通过CRM系统管理全球业务
本期,小Z为大家带来的CRM管理系统客户案例是某大型装备制造企业运用Zoho CRM管理全球业务的过程分享。该企业是创业板上市公司,业务遍及100多个国家和地区,合作伙伴超百位,拥有覆盖全球的销售和服务网络。截止目前,相继…...
16.docker删除redis缓存数据、redis常用基本命令
1.进入redis容器内部 (1)筛选过滤出redis容器 docker ps | grep "redis"(2)进入redis容器 #说明:d24为redis容器iddocker exec -it d24 /bin/bash2.登陆redis (1) 进入redis命令行界面 redis-cli说明&a…...
【开源】基于JAVA+Vue+SpringBoot的教学资源共享平台
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…...
如何使用Python + 百度翻译API 自动大批量免费翻译Excel文件中的外语内容
手里有一个Excel文件,包括了大量的亚马逊德语搜索词(关键词),每个单元格1个,需要翻译为中文。但是文件大小超过了10M,不能使用百度或Google免费的文档功能,如果手工一个个的翻译然后粘贴又太麻烦,于是想到用Python加免费翻译API完成。 一、openpyxl库 用Python编辑处…...
ONLYOFFICE:一站式办公,探索高效办公新境界
写在前面ONLYOFFICE 介绍ONLYOFFICE 有哪些优势ONLYOFFICE 文档 8.0 发布如何体验 ONLYOFFICEONLYOFFICE 文档部分页面截图 写在前面 在当今这样一个数字化时代,办公软件已经成为我们日常工作中不可或缺的一部分,熟练使用 Office、WPS、腾讯文档、金山文…...
nginx反向代理----->微服务网关----->具体微服务
今天,做项目的时候做项目的时候配路由出现bug,特此理顺一下从nginx到微服务网关再到微服务这一过程。 nginx配置 upstream admin-gateway{server localhost:21217; }server {listen 8803;location / {root F:/develop/admin-web/;index index.html;}…...
怎么清理电脑内存?详细图文教程分享!
“我的电脑用了才不到一年,现在内存总是不足。想问问大家平常遇到电脑内存不足的情况时有什么好用的清理方法吗?” 随着电脑使用时间的增长,内存占用可能会不断增加,导致电脑运行缓慢。为了保持电脑的良好性能,定期清理…...
CKS1.28【1】kube-bench 修复不安全项
Context 针对 kubeadm 创建的 cluster 运行 CIS 基准测试工具时,发现了多个必须立即解决的问题。 Task 通过配置修复所有问题并重新启动受影响的组件以确保新的设置生效。 修复针对 API 服务器发现的所有以下违规行为: 1.2.7 Ensure that the --authoriz…...
6.s081 学习实验记录(五)traps
文章目录 一、RISC-V assembly简介问题 二、Backtrace简介注意实验代码实验结果 三、Alarm简介注意实验代码实验结果 一、RISC-V assembly 简介 git checkout traps,切换到traps分支user/call.c 文件在我们输入 make fs.img 之后会被汇编为 call.asm 文件…...
探索设计模式的魅力:从单一继承到组合模式-软件设计的演变与未来
设计模式专栏:http://t.csdnimg.cn/nolNS 在面对层次结构和树状数据结构的软件设计任务时,我们如何优雅地处理单个对象与组合对象的一致性问题?组合模式(Composite Pattern)为此提供了一种简洁高效的解决方案。通过本…...
文心一言4.0API接入指南
概述 文心一言是百度打造出来的人工智能大语言模型,具备跨模态、跨语言的深度语义理解与生成能力,文心一言有五大能力,文学创作、商业文案创作、数理逻辑推算、中文理解、多模态生成,其在搜索问答、内容创作生成、智能办公等众多…...
Python循环语句——while循环的嵌套应用
一、引言 在Python编程中,循环结构是必不可少的。其中,while循环因其灵活性而备受青睐。嵌套while循环,即将一个while循环放置在另一个while循环内部,能让我们编写更为复杂的程序逻辑。本文将详细介绍嵌套while循环的基本概念、使…...
数据库管理-第145期 最强Oracle监控EMCC深入使用-02(20240205)
数据库管理145期 2024-02-05 数据库管理-第145期 最强Oracle监控EMCC深入使用-02(20240205)1 监控方式2 度量配置3 阻塞4 DG监控总结 数据库管理-第145期 最强Oracle监控EMCC深入使用-02(20240205) 作者:胖头鱼的鱼缸&…...
Centos 7系统安装proftpd-1.3.8过程
一、下载安装: 1、网站中能够下载到profptd源码: http://www.proftpd.org/ 这个是软件源码ftp地址: ftp://ftp.proftpd.org/distrib/source/ 2、进入目录/root/download解压: tar -zxvf proftpd-1.3.8.tar.gz #将源码压缩包解压…...
DevExpress ASP.NET Web Forms v23.2最新版本系统环境配置要求
本文档包含有关安装和使用 DevExpress ASP.NET Web Forms控件的系统要求的信息。 点击获取DevExpress v23.2正式版(Q技术交流:909157416) .NET Framework DevExpress ASP.NET Web Forms控件和MVC扩展支持以下.NET Framework 版本。 如果您需要 DevExp…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
