Kacam.net

Vedere il mondo

Sistemi: un pezzo alla volta

Non «gestione della memoria» o «rete», ma «quanto distano un TLB miss e un page fault» e «quanti giri prima del primo byte»: ogni scheda scava un pezzo solo, finché non sai dare un ordine di grandezza.

Per ora queste istruzioni esistono solo in 简体中文.

Come si usa

Questa serie insegna invece di interrogare: ti guida invece di incalzarti finché non hai più nulla da dire. Quando ti blocchi chiede prima a che livello (mai sentito / lo so ma non so perché / so perché ma non lo applico) e poi decide che cosa darti. Solo dopo averti guidato due volte te lo dice, e allora ti chiede di ripeterlo con parole tue.

Ti chiederà numeri di continuo: se rispondi «ha un costo» o «è più veloce» ti interrompe. Una conclusione senza ordine di grandezza è una conclusione imparata a memoria — ed è proprio ciò che questa serie allena.

Come iniziare

  1. Scegline una, aprila, copia il prompt.
  2. Incollalo in una conversazione nuova e vuota, non dire nulla e aspetta la prima domanda.
  3. Preparati a dare ordini di grandezza: quanti nanosecondi, quanti microsecondi, quante volte più lento. Dire che non lo sai va bene: lo annota e prosegue.

Quattro comandi da lanciare in qualsiasi momento

  • 跳过 passa subito alla scena successiva
  • 换个说法 rispiega questo punto da un'altra angolazione
  • 直说吧 dai la risposta completa e poi fammela ripetere
  • 复盘 salta alla chiusura e stampa la scheda di bilancio

Tre trappole

  • Non leggere prima la soluzione in fondo: quella sezione sugli «errori di ragionamento più comuni» è la risposta a ogni domanda.
  • Non buttarti sul termine tecnico. Dire «è un TLB miss» è facile; dire di quanto costa meno di un page fault è ciò che conta.
  • Quando comincia a lodarti, rimandalo alla regola «non lodarmi». Guidare non è coccolare.

Per farti gli ordini di grandezza: letture casuali e poi il primo byte. Per il debug in produzione: malloc, stalli TCP, cambi di contesto. Per il codice concorrente: riordino e falsa condivisione.

Memoria

一次内存读,硬件走了几步
一次普通的内存读,硬件到底走了几步?
★★★★☆ · circa 35 min
malloc 返回之后,内存就归你了吗
8GB 的机器上 malloc(4GB) 两次,会成功吗?
★★★☆☆ · circa 30 min
mmap 省掉的到底是哪一次拷贝
「mmap 是零拷贝所以更快」——省的是哪一次,代价换到哪去了?
★★★★☆ · circa 30 min

Concorrenza

重排序,是编译器干的还是 CPU 干的
你说的重排序,是编译器干的还是 CPU 干的?
★★★★★ · circa 40 min
改的是不同的变量,为什么互相拖慢
8 个线程各改各的计数器,为什么比单线程还慢?
★★★★☆ · circa 30 min
一次上下文切换,贵在哪
切换的成本主要不是保存寄存器 —— 那是什么?
★★★★☆ · circa 30 min

Archiviazione

一次 4KB 随机读,时间花在哪
说 SSD 快,快在哪一项上?快多少倍?
★★★☆☆ · circa 30 min
write 返回了,断电之后数据还在吗
write 返回了,一秒后断电 —— 数据还在吗?
★★★★☆ · circa 35 min

Rete

第一个字节到达之前,来回跑了几趟
打开一个 2KB 的接口,网络上来回跑了几趟?
★★★☆☆ · circa 30 min
两端都没挂,数据为什么过不去
两端都没挂,数据就是过不去 —— 卡了 40 毫秒还是 200 毫秒?
★★★★☆ · circa 35 min
Questi prompt sono open source Il testo è mantenuto nel repository pubblico kacam-net/hero-prompts. Se uno non incalza abbastanza, o alla sua soluzione manca una riga, vai a cambiarlo: che finisca online qui è un'altra decisione, la prende il catalogo da questa parte.