Go工作池
学习 Go 的工作池模式,你可以按照以下步骤系统掌握: 1. 理解工作池模式的概念 工作池是一种常见的并发模式,通过限制并发任务的数量,提高资源利用率,避免系统过载。 核心思想:创建固定数量的工作者(Worker),从任务队列中取任务处理,直到任务完成。 2. 学习基础知识 Goroutines:学习如何使用 Go 的轻量级线程 goroutines。 Go 官方文档 - Goroutines Channels:掌握 Go 的 channels 用于 goroutines 间通信。 Go 官方文档 - Channels WaitGroup:了解如何使用 sync.WaitGroup 等待所有 goroutines 完成。 WaitGroup 示例 3. 实践简单工作池先实现一个简单的工作池,熟悉基本流程。 123456789101112131415161718192021222324252627282930313233343536373839404142package mainimport ( "fmt" ...
Go天生的并发优势
借鉴文章: https://www.topgoer.com/ 1234func main() { go hello() // 启动另外一个goroutine去执行hello函数 fmt.Println("main goroutine done!")} 这一次的执行结果只打印了main goroutine done!,并没有打印Hello Goroutine!。为什么呢? 例子:当main()函数返回的时候该goroutine就结束了,所有在main()函数中启动的goroutine会一同结束,main函数所在的goroutine就像是权利的游戏中的夜王,其他的goroutine都是异鬼,夜王一死它转化的那些异鬼也就全部GG了。 所以我们要想办法让main函数等一等hello函数,最简单粗暴的方式就是time.Sleep了 12345func main() { go hello() // 启动另外一个goroutine去执行hello函数 fmt.Println("main goroutine...
go中的context
首先理解同步调用与异步调用: 同步调用和异步调用是两种常见的函数调用方式,尤其在多线程、并发编程中,这两种方式对程序的执行流程和效率有着直接影响。 1. 同步调用(Synchronous Call)同步调用是指函数调用时,调用者会等待被调用的函数执行完毕并返回结果之后,才能继续执行后续操作。在同步调用过程中,函数的调用者会阻塞,直到函数执行完成。 特点: 阻塞:调用者会等待被调用的函数执行完成,才会继续执行后续代码。 执行顺序:代码按顺序执行,当前任务完成后,才能继续下一个任务。 举个例子: 12345678910111213141516package mainimport "fmt"import "time"// 模拟一个同步调用的函数func longTask() { time.Sleep(2 * time.Second) fmt.Println("Long task finished")}func main() { fmt.Println("Start...
软技能
书中的前言: 引用的几句名言! “现在的困难可能会成为未来的趋势” “站在对方的角度,在说服对方的时候,为他准备好解决问题的方案” “不浪费任何一次危机,任何危机都是组织结构重新组合的重大契机” “作为听者,你能理解表达能力较弱的一方的言说,作为言说者,你能让理解力较弱的一方明白你的意思” 组合型思维: 我这里强,需要你那里强,互相配合,达到双赢, 多想: 你能为别人做什么,你能为圈子带来什么。为什么小的时候看什么都新奇,到那时长大后变得更加麻木了呢?对周围事物,没有了其他想法是不是思维被固定住了呢?...
你的灯还亮着吗
今天一下午的时间看了这本书,对我的感触很大,很有助于思考,对于一个问题的思考,一种问题不同的问法,产生不同的问题 文字游戏:一句话不同的停顿产生不同的问题 有些事情是不是简单的问题复杂化(这应该是普遍现象) 复杂的问题简单化(很少) 你是不是真的想要解决这问题? 追溯本源,从一个婴儿视角重新审视这个问题! 一生二,二生三,三生万物: 你对一个问题的解决(是否是真的解决?)一个问题的解决必然产生另一个问题的产生! 看看你是否能从一个问题的解决,来想到它产生了3个其他的问题?
新的笔记软件
Obsidian 要成为我的笔记软件了! 真的太强大了! 我想用一种新的形式去更加有效的记录我的笔记!
一位老哥的分享给了我一些启发
学习方法:老哥的思维方式也给了我一些启发 以下是老哥的分享: 当知识点量大起来时, 我觉得”写作”的意义应该在于辅助思考 因为短时间内可能我们能记得很好, 但是对于长时间的庞大知识体系的学习, 就容易忘记一些分支内容 所以第一步我做的是把长长的博客尽量拆解为小的讨论主题 作为”词条”存在 比如我写了个k8s主题的词条 写道”容器”这个词会自动链接到我之前写过的容器相关的内容 里面的内容是否符合当下我需要的定义 如果是, 那么可以知识复用 如果不是, 那么我需不需要创建新的词条来讨论这个主题然后关联知识形成网络 比如一个使用mysql + reids搭建的系统, 即用到了mysql, 又用到了redis, 同时它本身还是个系统设计就会难以归类 但是 一个文章可以同时带有mysql, redis, 系统设计三种tag 让知识形成网络! 先把书的标题提取出来 建立一个词条 然后去网上查, 这个东西包含哪些东西 然后去网上查, 这个东西包含哪些东西 等熟悉了基于零散信息的网络后 再去快速浏览权威书籍 迭代网络 听了老哥的分享!...
学习数据库
参考书籍: 数据库设计 我先从事务入手: 事务概念 : 与单个用户或者程序执行,完成读取或者更新数据库内容的一个或一串操作 应用程序的一次执行就是一个事务或者多个事务 示例: 简单事务: 更新x员工的工资(涉及:数据库的读和写,和非数据库操作) 复杂事务:删除x的员工记录,并把x员工的事务交付给其他人去做。 (过程中若并非所有的操作都被执行,那么数据库的引用完整性将遭到破坏)(数据库也处于不一致状态) 尽管一致性暂时遭到破坏,但是数据库总是可以从一种一致状态转换到另一种一致的状态 数据库最终的结果 COMMIT:执行成功,事务最终被提交 (数据库也达到了一种新的状态) ABORTED:事务没有执行成功 (事务被撤销)则数据库必须要还原事务开始之前的一致状态 已经提交的事务不能被撤销,只能通过(补偿事务)进行覆盖 消除事务产生的影响 DBMS将在程序正确结束后自动执行COMMIT操作,若不能成功执行则 ROBACK PARTIALLY COMITTED:若在最后一条语句被执行时产生了 破坏了可串行化或违反了完整约束 因此事务必须被撤销...
关于我学习的一些资源和方法
兄弟,我理解你的心态,觉得实践的收获更直观,看书反而有点慢。但实际上,看书和实践结合,效果会倍增。下面我不仅推荐优质资源,还会分享高效阅读的方法,帮你更好地平衡学习时间。 学习资料推荐1. 数据库相关 书籍:《高性能 MySQL》 重点阅读:索引优化、事务机制、查询优化。 免费在线教程: SQL 教程(w3schools) MySQL 官方文档 2. 计算机网络 书籍:《计算机网络:自顶向下方法》或《图解HTTP》 重点章节:HTTP、TCP/IP、DNS、HTTPS。 免费资源: HTTP 协议详解 Wireshark 网络分析教程 3. 操作系统 书籍:《现代操作系统》 重点章节:进程、线程、同步、内存管理。 免费资源: Operating Systems: Three Easy Pieces Linux 操作系统入门 4. 系统设计 书籍:《系统设计入门》(Grokking the System Design Interview) 重点学习:缓存、负载均衡、限流。 博客: 系统设计基础 5....