Home
Miigon's blog
Cancel

随笔:Golang 循环变量引用问题以及官方语义修复

这篇文章谈一个已经在 Golang 中存在多年的,几乎每一个新手都要被坑一遍的设计:引用捕获了循环变量,且逃逸出循环迭代范围而造成的逻辑错误。 以及重点是讨论了目前对这个常见问题的解决办法的探索(静态分析存在的不足,以及2022年10月 Golang 官方提出的直接更改 for 循环变量语义,从语言设计上根本地消除这个问题的 proposal) background 这个问题是一个 Go...

[随笔]文件系统上存储哈希对象:哈希算法以及目录结构对性能的影响

从文件系统的实现原理角度讨论 /77/e1/77e1cccccc... 模式的 hash object 命名的优点以及必要/不必要性,以及算法选择。 原贴 这是我在 0xffff 论坛的回帖的备档:https://0xffff.one/d/1395-wen-jian-xi-tong-zuo-wei-huan-cun 一个常见的业务场景,需要实现一个 Key-Value Cach...

Linux 是否有 zombie thread?从glibc和内核源码探究

系统编程课上遇到的一个问题:Linux下,如果一个 pthread_create 创建的线程没有被 pthread_join 回收,是否会和僵尸进程一样,产生“僵尸线程”,并一直占用一个 pid/tid? 猜想 僵尸进程 对于进程与子进程来说,如果子进程退出了,但是父进程不对子进程进行 reap (即使用 wait/waitpid 对子进程进行回收),则子进程的 PCB(内核中的 ta...

MySQL Prepare后语句查询性能降低 内核源码bug排查分析

源自于业务上遇到的一个先将某个语句Prepare再Execute查询效率很低的问题,而将查询中的参数直接嵌入到SQL语句内并以文本形式执行,则执行反而变得很快。 测试环境:腾讯云 MySQL 服务(txsql8.0.22)、MySQL 源码编译(refs/tags/mysql-8.0.22) 问题描述 背景 MySQL 中,语句执行有两种方式,分别是 Text Protocol 和 P...

MIT6.830 Database Systems | 数据库系统

MIT6.830 Database Systems (Spring 2021) 前置课程: 6.033 Computer System Design 计算机系统设计 这门课与MIT 6.814是同一门课程,两者区别在于Final Project在6.814中由Lab5以及Lab6替代。虽然这门课是研究生课程,但是在MIT里,这门课大概1/3的学生是本科生。 ...

git的前世,和BitKeeper

很多人应该都知道git的开发,最早是用来管理linux的内核源码的。在git之前,linux用的是一个叫做BitKeeper的商业软件进行源码管理和patch merge。 最早最早,Linux采用的其实是和unix一样的邮件互发patch的方式来共享更改,随着内核开发者群体的不断增长,这样的贡献管理方式所需要的人力劳动已经开始明显影响内核的开发进展了。 BitKeeper(BK)软件的...

记一次 C++ 核心语言标准中一个 issue 的发现和提交经历

该文章记录自己的一次发现一个 C++ 核心语言标准规定中,关于枚举量重定义的一个规则缺陷(defect)并提交的经历。所有对标准的引用以 N4901 草案为准(当时的较新版本)。 C++ 核心语言标准 N4901 草案 引言 问题本身是关于 enum 中枚举值 (enumerator) 的重复定义问题的。 例子如下: enum { ee, ee }; 上面的代码,无论...

[SZU] 数据库内核课程 PostgreSQL 12.5 源码安装避坑 guide

课程:2022 年下学期,秦建斌老师的《数据库内核原理与实现》课程。 示例环境:Ubuntu 20.04 LTS PostgreSQL 版本: 12.5 1. 准备 linux 环境/虚拟机/或Windows下使用wsl Linux/Mac 用户可直接编译,Windows 用户自行搜索 wsl 教程配置后,剩余流程同 Linux 用户。 Mac 用户需要用其他方式(homebr...

[mit6.033] 第二部分 LEC 7-12 Networking 笔记

这是我自学 MIT6.033 课程的第二部分:Networking 的笔记。 该课程共分为 4 部分:Operating Systems、Networking、Distributed Systems、Security 课程详细介绍可以查阅:https://blog.miigon.net/posts/mit6033-computer-system-design/ 笔记为学习过...

[mit6.033] 第一部分 LEC 1-6 Operating Systems 笔记

这是我自学 MIT6.033 课程的第一部分:Operating Systems 的笔记。 该课程共分为 4 部分:Operating Systems、Networking、Distributed Systems、Security 课程详细介绍可以查阅:https://blog.miigon.net/posts/mit6033-computer-system-design/ ...

MIT6.033 Computer System Design | 计算机系统设计

MIT6.033 Computer System Design (Spring 2021) 前置课程: 6.004 Computation Structures 计算架构 6.006 Introduction to Algorithms 算法导论 ps. 本课 6.033 Computer System Design 和 6.S081 Operatin...

杂记随笔:唤醒丢失问题 & 条件变量 vs 信号量

Scenario 考虑 producer-consumer 同步模式中的 receiver: receive(bb): acquire(bb.lock) while bb.out >= bb.in: release(bb.lock) # release lock before sleep # so other threads can run wait(b...

MIT6.S081 Operating System Engineering 课程总结 & Lab 指北

课程介绍 MIT6.S081 Operating System Engineering 是麻省理工学院计算机科学本科的中级课程,前身是 MIT6.828 研究生课程。 课程基于 RISCV 架构以及类 unix 操作系统 xv6,介绍了操作系统最重要的几个基本概念,以及操作系统如何提供抽象、隔离、调度、资源管理,以及为上层应用程序提供服务。 Lab 作业几乎都是利用所学到的理论知识,为 x...

[mit6.s081] 笔记 Lab11: Networking | 网络

这是我自学 MIT6.S081 操作系统课程的 lab 代码笔记第十一篇:Networking(最后一篇)。此 lab 大致耗时:2小时。 课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.html Lab 地址:https://pdos.csail.mit.edu/6.S081/2020/labs/net.html 我的代...

[mit6.s081] 笔记 Lab10: Mmap | 文件内存映射

这是我自学 MIT6.S081 操作系统课程的 lab 代码笔记第十篇:Mmap。此 lab 大致耗时:6小时。 课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.html Lab 地址:https://pdos.csail.mit.edu/6.S081/2020/labs/mmap.html 我的代码地址:https://...

[mit6.s081] 笔记 Lab9: File System | 文件系统

这是我自学 MIT6.S081 操作系统课程的 lab 代码笔记第九篇:File System。此 lab 大致耗时:4小时。 课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.html Lab 地址:https://pdos.csail.mit.edu/6.S081/2020/labs/fs.html 我的代码地址:htt...

[mit6.s081] 笔记 Lab8: Locks | 锁优化

这是我自学 MIT6.S081 操作系统课程的 lab 代码笔记第八篇:Locks。此 lab 大致耗时:14小时。 课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.html Lab 地址:https://pdos.csail.mit.edu/6.S081/2020/labs/lock.html 我的代码地址:https:...

[mit6.s081] 笔记 Lab7: Multithreading | 多线程

这是我自学 MIT6.S081 操作系统课程的 lab 代码笔记第七篇:Multithreading。此 lab 大致耗时:3小时。 课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.html Lab 地址:https://pdos.csail.mit.edu/6.S081/2020/labs/thread.html 我的代...

[mit6.s081] 笔记 Lab6: Copy-on-write fork | fork 懒拷贝

这是我自学 MIT6.S081 操作系统课程的 lab 代码笔记第六篇:Copy-on-write fork。此 lab 大致耗时:4小时。 课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.html Lab 地址:https://pdos.csail.mit.edu/6.S081/2020/labs/cow.html 我的...

[mit6.s081] 笔记 Lab5: Lazy Page Allocation | 内存页懒分配

这是我自学 MIT6.S081 操作系统课程的 lab 代码笔记第五篇:Lazy page allocation。此 lab 大致耗时:5小时。 课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.html Lab 地址:https://pdos.csail.mit.edu/6.S081/2020/labs/lazy.html...