评测沙盒成本先算资源上限和排队 📅 2026/8/21 13:13:42 评测沙盒成本先算资源上限和排队评测用户代码时成本来自排队、编译、执行、日志和失败重试。极大输入并发运行既不能可靠地证明复杂度也可能影响同机服务。应先根据题目限制定义可接受的 CPU 时间、内存、进程数、文件大小与并发度再把这些约束落实到隔离环境。Linux cgroup v2 能限制资源但创建和管理 cgroup 往往需要系统权限或经过委派的运行时应用进程不应假设自己可以任意写入系统 cgroup。生产环境通常由容器运行时或专门的 sandbox 服务设置 CPU、内存和 PID 限制。type Limits struct { Timeout time.Duration Memory int64 PIDs int } func validateLimits(l Limits) error { if l.Timeout 0 || l.Memory 0 || l.PIDs 0 { return errors.New(资源限制必须为正数) } return nil }资源限制之外还要禁用网络、使用非特权用户、隔离文件系统、限制输出大小并确保超时后能回收子进程树。只发送信号而不等待回收仍可能遗留子进程。成本优化应来自真实工作负载的测量按语言、题型与输入规模记录 CPU 时间、内存峰值和队列等待。对超限结果保留标准化状态码而不是把它误判成算法答案错误。