Pistachio's Blog

Later equals never.

Sync包

sync包提供线程同步原语的方法 一、WaitGroup1.1 Go语言标准库提供了WaitGroup原语,可以用来等待一批Goroutine结束,或者说让主协程等待子协程结束再操作。 1.2 使用例子 主协程是main,如果不加WaitGroup,则运行完就会先退出,没法打印字符串。 加上WaitGroup,让主协程等待5个子协程都执行完毕后,主协程再继续执行 12345678910111......

双端队列

双端队列一. 定义双端队列支持前后双端插入元素、弹出、删除元素 deque<object_type>deq 常用函数: 12345678910111213push_back();//队尾添加元素push_front(); //队列开头添加元素TreeNode *node = deq.front();pop_front(); // 删除队列中第一个元素pop_back();//删......

go slice切片

一、定义slice元素存储在连续的内存中,实质是数组 1234567// Slice is the runtime representation of a slice.// It cannot be used safely or portably and its representation may change in a later release.type Slice struct &#......

滑动窗口

题目中关键字是有连续、数组等字眼,可以考虑使用滑动窗口。 但如果数组中有负数,就不能用滑动窗口解决,可以考虑前缀和的方法。 LeetCode题目总结和为s的连续正数序列滑动窗口 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 思路: 选取一个点i,让j一直走,直到j>target,若都没有找到和为target的连续序列,则证明前面选......

go常用命令

删除不需要的依赖包、下载新的依赖包、更新go.sum 1go mod tidy ...

go GMP模型

一、GM模型go1.1版本之前是用GM模型的: 缺点: 全局队列的锁竞争问题。M从全局队列获取G时,都要获取队列的锁,导致激烈的锁竞争,性能下降 M的使用效率不能最大化,增加空转时间(没有work-stealing 和 hand-off机制) M转移G增加额外开销。例如M1在运行G1时,创建了G2。为了继续执行G1,需要把G2交给其它的M处理,或者放在全局队列中,不能保证是由M1处理,......

GC算法

一、背景知识 bbs数据段:全局变量、静态数据 函数栈帧(栈):函数的局部变量、参数、返回值。栈是系统自动分配空间的,例如定义一个var a string;系统会自动在栈上为其开辟空间。 堆:函数内部动态分配的内存,由程序员申请分配和释放。在编译阶段不能确定数据对象的大小、或者对象的生命周期超出了当前所在函数,则不适合分配在栈上,要分配在堆。 分配在堆上的数据需要程序主动释放才可以重新使用......

channel

一、定义Channel 是 goroutine 之间的通信方式,Go语言的并发模型是CSP(Communicating Sequential Processes),提倡通信来共享内存,而不是共享内存来通信。 gorotine由 runtime来管理 二、创建创建有缓冲的缓存 1ch := make(chan int, 2) //创建channel,类型为char, buffer大小是2 ......

Redis持久化机制

Redis除了可以保存在内存中,但是内存的数据容易丢失,因此有两种持久化策略:快照RDB(Redis Database Backup file)和追加式文件AOF机制(Append Only File)。  RDB机制(默认)定义在指定的时间间隔内将内存中的数据集以快照文件的形式写入磁盘。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。默认使用这种方式。 工作原理 Redis调用f......

解决系统并发问题

前言之前开发了办公室预约系统,功能上基本实现了,现在需要提升性能问题,比如考虑并发情况,在多个人同时预约的时候,怎样解决并发问题呢?其实本质是要对事务上锁。 1. 在MySQL方面提升MySQL的性能分析 MySQL Query Optimizer(自带的优化器) MySQL常见的瓶颈 CPU饱和:通常发生在数据装入内存或者从磁盘中读数据 磁盘IO饱和:载入的数据远大于内存的容量 服务器性......