NarrowGate:回测吞吐与 Live 尾延迟工程 TL;DR:读者收益摘要这篇文章是 NarrowGate 的工程篇,接在算法篇 《NarrowGate:Maker Quote EV 与被动做市研究框架》 后面。算法篇回答“maker quote 应该验证什么”;本文回答“这些验证如何被工程化成可重复的 replay、可审计的 live hot path,以及可解释的延迟预算”。 离线侧的低延时,本质是把严格 replay 从“只能抽样验证”推进 2026-07-01 C++ C++ 低延时 pybind11 Market Making 系统工程
NarrowGate:Maker Quote EV 与被动做市研究框架 TL;DR:读者收益摘要NarrowGate 不是一个“做市策略已经跑通并盈利”的项目,而是一个用于验证 maker quote EV 的研究框架。它研究的核心问题是:一笔被动限价单被成交之后,到底是在收取 spread,还是在替更快的信息交易者接风险。 这篇文章只讲算法与证据框架;C++、pybind、x86 benchmark 和 live hot path 细节拆到另一篇:NarrowGat 2026-06-19 Market Making Market Making 市场微观结构 数据质量 机器学习 回测
MIT 6.S081 Lab 5: Lazy page allocation Eliminate allocation from sbrk()我们先来看看这个图: 代码段不必多说,唯一要注意的点是:在原始 xv6 实现里,sbrk() 会触发实际物理页分配并建立映射;而本实验要改成“先只扩大地址空间,再按缺页异常补映射”的方式。 本实验你的任务是修改 sys_sbrk()使得其只增加/减少进程地址空间大小,而不真正地分配页面。sbrk是xv6提供的系统调用,它使得用户应用 2023-02-21 操作系统 MIT 6.S081 Lab
MIT 6.S081 Lab 1: Xv6 and Unix utilities 在这个实验中要实现几个用户级别的应用程序,其对应的系统调用在kernel中都已经被实现好了。 sleep本实验要为 xv6 实现 UNIX 程序 sleep; 您的睡眠应暂停用户指定的滴答数。 滴答是 xv6 内核定义的时间概念,即来自定时器芯片的两次中断之间的时间。 我们检查参数,如果出现不是数字的参数就exit(-1),否则进行sleep。代码如下所示: #include "kern 2022-12-12 操作系统 MIT 6.S081 Lab
记一次manjaro OS恢复 我的PC前段时间短路了,更换主板之后重新启动电脑没有manjaro OS和Windows的启动项选择界面了,而是直接进入Winows,查看BOIS之后发现只有一个Winows启动项,遂开始恢复。 首先我发现只有一个Winows启动项,于是直接在Winows下管理员cmd中输入如下命令增加启动项: $bcdedit /set "{bootmgr}" path 2022-05-29
CMU 15-445 Project 3: Query execution TASK #1 - SYSTEM CATALOG在这个任务中,我们会修改rc/include/catalog/catalog.h以允许 DBMS 将新表添加到数据库并使用名称或内部对象标识符 ( table_oid_t) 检索它们。 我们在最新的BusTub中可以看到catalog的实现,但是这个版本只能实现通过6个测试, 先来看看TableInfo的结构体: struct TableInfo & 2022-05-16 数据库 CMU 15-445
Go select 与 I/O 多路复用 selectGo 的 select 关键字用到了“多路等待”的思想,但它本身不是操作系统层面的 I/O 多路复用,因为 select 面向的是 channel,而不是文件描述符。先看下面的例子: package main import ( "fmt" "sync" ) func main() { c1 := make(chan int, 1 2022-04-03 Go语言 Go I/O multiplexing
Go 标准库:container、reflect、unsafe 与 atomic Go map底层实现Go语言的map底层实现基于哈希表。Hash会把任意长度输入映射到有限值域,因此一定会存在冲突。Go map 不是“传统链地址法”的单链表实现,而是“bucket + overflow bucket”结构:每个 bucket 固定容纳若干键值对,冲突严重时通过 overflow bucket 串接扩展。值得注意的是:==Java1.8中在冲突链较长时会做树化优化,而 Go ma 2022-03-20 Go语言 Go Go standard library
Go runtime: panic 与 defer Go panic大多数编程语言都提供了异常处理机制,恰恰相反,Go延续了C语言的风格,并未提供异常处理机制。但在Go中,提供了panic异常,从某种意义上说,它也非常接近其他语言的异常处理。 Go语言在编译期间就能捕获大量异常,但是有些异常只能发生在运行期间,比如运行期间的除以0的异常,数组越界错误等。 除了程序本身的问题导致panic异常外,也可以直接在程序里调用panic函数引发panic异常 2022-03-12 Go语言 Go runtime
MIT 6.S081 Lab 6: Copy-on-write fork 早期的fork()实现较为“简单粗暴”,会将父进程的物理内存完整拷贝一份,并映射到子进程的内存空间中,这种方式在很多情况下是不必要的,一部分虚拟内存是只读的,对他们进行拷贝是一种浪费,其次,由于进程有时会在调用fork函数之后立即调用exec以载入新的可执行文件,重置地址空间,之前的内存拷贝就完全失去了意义。因此可以用写时拷贝技术来对fork的实现进行优化。对于本来就是只读的虚拟页,父进程和子进 2022-02-24 操作系统 MIT 6.S081 Lab