- 博客(6)
- 收藏
- 关注
原创 常见的五种I/O模型
当某个 I/O 就绪时,进程再处理它,避免阻塞在单个 I/O 上。调用异步 I/O 操作(如 aio_read)后,内核会负责完成所有工作(包括数据拷贝),完成后通过回调函数或信号通知进程。调用 I/O 操作时,若数据未就绪,内核会立即返回一个错误码(如 EWOULDBLOCK),进程需要不断轮询检查状态,直到数据准备好为止。通过注册信号处理函数(如 SIGIO),当内核数据就绪时发送信号通知进程,进程再主动执行 I/O 操作。调用 I/O 操作时,进程会被阻塞,直到数据从内核空间拷贝到用户空间完成。
2025-04-02 13:36:01
365
原创 golang中把切片当作函数参数时的注意事项
传递切片值时,因共享底层数组,元素修改会直接影响外部,传递切片指针可强制同步结构变化,,通过显式赋值确保外部切片更新。
2025-03-31 19:08:36
203
原创 golang中切片容量的增长
在golang中,切片容量是一种动态增长机制。当切片的长度达到或超过容量时,golang会自动扩展其底层数组的容量。切片容量增长(growslice)的具体规则在不同版本是不同的。此外,在扩容后还会进一步进行。即当前长度 + 追加元素的数量。roundupsize的解释。把阈值作为基准的一部分。,来计算出最终容量。补充:字节的单位是B。
2025-03-31 15:52:36
523
原创 Redis---RDB和AOF持久化
RDB:适合备份、快速恢复和容忍少量数据丢失的场景。AOF:适合对数据安全性要求极高,允许牺牲部分性能的场景。一起使用:生产环境推荐同时开启,兼顾安全性与恢复效率。混合持久化:终极优化方案,结合 RDB 和 AOF 的优势(Redis 4.0+)。(后面应该还会补充...但是还没想好怎么条理清晰的写,所以先这样小小总结一下叭)
2025-03-27 14:01:42
269
原创 golang中map的扩容机制——增量扩容和等量扩容
每个桶最多存放 4个键值对(实际中通常是8个,这里简化举例)。此时桶0还差一个位置就满了,在这种情况下,我们继续插入键E到桶0。那么主桶就会变满,哈希表就会创建一个桶0的溢出桶,:当键值对数量超过当前桶数组容量的6.5倍时,说明桶即将被填满,此时会触发扩容,:当溢出桶过多(如频繁插入删除导致数据分散)但键值对总数较少时,桶数量不变,但会。初始状态一共有两个桶,每个桶能存放四个键值对,那么总容量为8个。,合并冗余的溢出桶,使数据分布更紧凑,从而提高查询性能。:每个桶的负载降低,减少哈希冲突,查询更快。
2025-03-26 11:46:28
340
原创 Redis——集群模式和哨兵模式
Redis集群的解决办法:直接把仓库拆成多个小仓库(分片),每个小仓库有备用仓库(副本),再雇几个管理员(集群自动管理)。想象你有一个仓库(单机Redis),用来存货物(数据)。一开始货物少,仓库够用。比如:1个主库(写数据),2个从库(读数据 + 备份)。货物分散存放:饮料放仓库A,零食放仓库B,日用品放仓库C。直接建3个小仓库(分片),每个小仓库配一个备用仓库。仓库A着火,备用仓库A立刻顶上,其他仓库照常工作。问题:仓库满了,管理员搬货慢,仓库着火就全完了。主仓库着火,管理员立刻把备用仓库变成主仓库。
2025-03-24 12:52:41
163
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人