mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 17:38:10 +00:00
- docs/zh/架构迁移评估.md: C ABI→子进程+共享内存完整迁移论证(1621行) - docs/zh/experiments/: 18项可复跑可行性实验(架构评估的所有数字来源) - plan.md §11: 11.1~11.9 插件架构缺陷修复清单(唯一权威编号) - main 保持干净,本批次为 update 特性分支的整改起点
51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
//go:build ignore
|
||
package main
|
||
|
||
import (
|
||
"bufio"
|
||
"encoding/binary"
|
||
"encoding/json"
|
||
"fmt"
|
||
"os"
|
||
"strconv"
|
||
|
||
"golang.org/x/sys/unix"
|
||
)
|
||
|
||
// 模拟插件:拿锁 → 读 final_text → 追加自己的标记 → 写回 → 放锁
|
||
// 锁通过 stdio RPC 向内核申请(方案 3.7:锁仲裁回归内核,无 cgo)
|
||
func main() {
|
||
tag := os.Args[1]
|
||
shmf := os.NewFile(3, "shm")
|
||
data, err := unix.Mmap(int(shmf.Fd()), 0, 65536, unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)
|
||
if err != nil { fmt.Fprintln(os.Stderr, "mmap:", err); os.Exit(1) }
|
||
|
||
dec := json.NewDecoder(bufio.NewReader(os.Stdin))
|
||
w := bufio.NewWriter(os.Stdout)
|
||
enc := json.NewEncoder(w)
|
||
rpc := func(method string) {
|
||
enc.Encode(map[string]string{"method": method}); w.Flush()
|
||
var r map[string]interface{}; dec.Decode(&r)
|
||
}
|
||
|
||
const iters = 300
|
||
for i := 0; i < iters; i++ {
|
||
rpc("stage.lock")
|
||
// --- 临界区:偏移解引用读写 final_text ---
|
||
off := binary.LittleEndian.Uint32(data[0:4])
|
||
ln := binary.LittleEndian.Uint32(data[4:8])
|
||
cur := string(data[off : off+ln])
|
||
add := tag
|
||
newS := cur + add
|
||
// append-only arena:写到新位置
|
||
newOff := binary.LittleEndian.Uint32(data[8:12])
|
||
if int(newOff)+len(newS) > 65536 { rpc("stage.unlock"); break }
|
||
copy(data[newOff:], []byte(newS))
|
||
binary.LittleEndian.PutUint32(data[0:4], newOff)
|
||
binary.LittleEndian.PutUint32(data[4:8], uint32(len(newS)))
|
||
binary.LittleEndian.PutUint32(data[8:12], newOff+uint32(len(newS)))
|
||
rpc("stage.unlock")
|
||
}
|
||
fmt.Fprintln(os.Stderr, "worker "+tag+" done, iters="+strconv.Itoa(iters))
|
||
}
|