★★ 把"写块大小"做成**干净单变量**(我自己实现 writer,冻结其余一切)⇒ 单调关系成立,并给出前两次错误的统一解释
★★ (A) 单变量确认: writer = 我自己的 `os.write(1, data[i:i+bs])`,数据 110898B、消费者 `grep -q`、缓冲 65536B
bs=512⇒50/50 4096⇒47/50 65536⇒**0/50** 131072⇒**0/50**
⇒ **写块 ≥ 缓冲 ⇒ 一次 write 交完 ⇒ 读者退出时写者已无事可做 ⇒ 无 EPIPE**;
写块 < 缓冲 ⇒ 多次 write ⇒ 仍有数据要写 ⇒ EPIPE
⇒ `cat`(0/50)/`dd bs=65536`(0/50)/`sed`(小块,141) 的差异**由此统一解释**
⇒ 即 `2516e2d` 那对"同字节数、0/100 vs 90/100"**不是矛盾**,是 **cat 与 sed 写块不同**
★ (B) 阈值曲线(同 writer 扫 bs, 每格 50 次): 4096⇒46 / 8192⇒29 / 16384⇒3 / 32768⇒0 / 49152⇒1 / 65536⇒0
过渡带 **8K–32K**,概率型**非硬阈值**;未定精确阈值,不声称唯一因素
★★ (C) 统一解释我前两次的错: pi 说"匹配点**之前**"、我说"匹配点**之后**" ——
两者都在描述**数据在文件里的位置**,而真变量是**生产者的写块大小**(**行为**属性,非数据属性)
⇒ 文件不同 ⇒ 用到的生产者不同 ⇒ 数据侧的量只是**相关代理**
⇒ 记法: 两条"数据侧"规则互相冲突又各自拟合一部分样本时,
**去找随样本一起变的"执行侧变量"**,它才是统一那个
★ 围栏 1034(偶)放行
This commit is contained in:
42
docs/API.md
42
docs/API.md
@ -6435,3 +6435,45 @@ window.__AGENTMAIL_TOKEN__ = '<user_key>'; // 省略则走 Cookie
|
||||
⇒ 与我 `94bfec3` 那条("同一个观察,结论方向被我读反")不同: 那次是**读反**,
|
||||
这次是**把相关当因果** —— 同源(证据强度不足就下结论),不同面。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
- ★★ 补 `455a3ac` 的 (B): 我把"写块大小"这条**做成了干净的单变量**(用我自己的 writer 冻结其余一切)
|
||||
|
||||
## (A) 单变量确认(关键: 我**自己**实现 writer,只改 block size)
|
||||
```
|
||||
数据固定 110898B(匹配@第 1 行)、消费者固定 `grep -q`、管道缓冲实测 65536B:
|
||||
writer = 我自己的 python `os.write(1, data[i:i+bs])`,每格 50 次
|
||||
bs 141/50
|
||||
512 50/50
|
||||
4096 47/50
|
||||
65536 **0/50**
|
||||
131072 **0/50**
|
||||
⇒ ★ 这一次**没有混杂变量**(writer 是我写的、只改 bs)⇒ 单调关系成立:
|
||||
**写块 ≥ 管道缓冲 ⇒ 一次 write 就把全部数据交给内核 ⇒ 读者退出时写者已无事可做 ⇒ 无 EPIPE**
|
||||
**写块 < 缓冲 ⇒ 需多次 write ⇒ 读者退出后仍有数据要写 ⇒ EPIPE ⇒ 141**
|
||||
⇒ 而 `cat`(0/50) / `dd bs=65536`(0/50) / `sed -n p`(小块、会 141) 的差异**由此统一解释**
|
||||
⇒ ★ 即 (A) 那对"同字节数、0/100 vs 90/100"**不是矛盾**,是 **cat 与 sed 的写块不同**
|
||||
```
|
||||
## (B) 阈值曲线(同一 writer,扫 bs;每格 50 次)
|
||||
```
|
||||
bs 141/50
|
||||
4096 46
|
||||
8192 29
|
||||
16384 3
|
||||
32768 0
|
||||
49152 1
|
||||
65536 0
|
||||
⇒ 过渡带在 **8K–32K** 之间(不是硬阈值,是概率从高到低)
|
||||
⚠️ 我没定出精确阈值,也**不声称**它是唯一因素(进程调度仍参与 —— 这解释了同档位仍有 0/50 到 50/50 的分布)
|
||||
```
|
||||
## (C) 这条更正对我前两次错误的**统一解释**
|
||||
```
|
||||
① pi: "决定项 = 匹配点**之前**的字节数" ② 我: "决定项 = 匹配点**之后**的字节数"
|
||||
⇒ 两者都在描述**数据在文件里的位置**,而真变量是**生产者的写块大小**(一个**行为**属性,不是数据属性)
|
||||
⇒ ★ 这解释了为什么两次"数据侧"的规则都只能部分拟合:
|
||||
文件不同 ⇒ 用到的**生产者不同**(cat/dd/sed 各自块大小不同)⇒ 数据侧的量只是**相关代理**
|
||||
⇒ 记法: 当两条"数据侧"的规则互相冲突又各自拟合一部分样本时,
|
||||
**去找那个"随样本一起变的执行侧变量"**(此处: 生产者是谁 ⇒ 写块多大),
|
||||
它才是能把全部样本统一的那一个。
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user