# Termux 前后台性能对比实测:合理配置释放 100% 满血算力

很多在 Android 上使用 Termux 进行开发、编译、运行服务(甚至跑小型大模型与智能体)的开发者常常有一个顾虑:“Termux 切到后台之后,会不会被系统严重降频、丢进小核,甚至卡成幻灯片?”

为了验证 Android 系统级后台调度对 Termux 性能的实际影响,我们在真实手机环境(基于 Android 平台 + Termux PRoot Ubuntu 容器)进行了一次严谨的前台 vs 后台基准性能对比测试。

实测结论出乎意料但又情理之中:在经过合理配置后,Termux 无论是在前台还是切到后台,CPU 算力与 I/O 吞吐均保持了 100% 的满血发挥,性能损耗为 0%!


一、测试方案与基准设计

为了排除单次波动的偶然性,测试设计遵循以下原则:

  1. 多轮采样:前台与后台各连续执行 3 轮完整基准测试,去除缓存热身偏差,计算算术平均值。
  2. CPU 单核算力:采用密集 SHA-256 哈希计算(每次 35 万次迭代),测试单核主频与单线程指令吞吐。
  3. CPU 多核并发:采用多进程并发模式(4 进程同时压满 4 个核心,各 25 万次计算),测试多核调度与进程配额是否受限。
  4. 磁盘 I/O 压力:生成 96MB 随机数据,进行连续写入并强制调用 fsync 刷入物理存储,随后读取,测试后台存储调度。
  5. 严谨的后台切换缓冲:后台测试脚本内置 10 秒缓冲倒计时,启动后立即将 Termux 切至后台(返回手机桌面并开启其他日常应用),待其完全处于后台状态后再触发性能测试。

测试核心脚本 (bench.py)

import sys, json, time, os, hashlib
from concurrent.futures import ProcessPoolExecutor, as_completed

def cpu_burn_chunk(iterations):
    data = b"TermuxBackgroundPerfBenchmarkingTestStringData" * 16
    total = 0
    for i in range(iterations):
        total += len(hashlib.sha256(data + str(i).encode()).digest())
    return total

def run_single_thread(iterations=350_000):
    start = time.perf_counter()
    cpu_burn_chunk(iterations)
    elapsed = time.perf_counter() - start
    return {"elapsed_s": round(elapsed, 4), "ops_sec": round(iterations / elapsed, 2)}

def run_multi_thread(num_workers=4, iterations_per_worker=250_000):
    start = time.perf_counter()
    with ProcessPoolExecutor(max_workers=num_workers) as executor:
        futures = [executor.submit(cpu_burn_chunk, iterations_per_worker) for _ in range(num_workers)]
        for f in as_completed(futures):
            f.result()
    elapsed = time.perf_counter() - start
    total_ops = num_workers * iterations_per_worker
    return {"workers": num_workers, "elapsed_s": round(elapsed, 4), "total_ops_sec": round(total_ops / elapsed, 2)}

def run_disk_io(mb=96):
    test_path = "/root/dsh/bench/io_test.tmp"
    data = os.urandom(1024 * 1024)
    start_w = time.perf_counter()
    with open(test_path, "wb") as f:
        for _ in range(mb):
            f.write(data)
        f.flush()
        os.fsync(f.fileno())
    write_time = time.perf_counter() - start_w

    start_r = time.perf_counter()
    with open(test_path, "rb") as f:
        while f.read(1024 * 1024):
            pass
    read_time = time.perf_counter() - start_r

    if os.path.exists(test_path):
        os.remove(test_path)

    return {"write_mb_s": round(mb / write_time, 2), "read_mb_s": round(mb / read_time, 2)}

二、测试数据与对比

以下为 3 轮实测取得的算术平均对比数据:

测试项目 指标单位 前台表现 (Foreground) 后台实测 (Background) 性能变化幅度 实测评估
单核 CPU 性能 ops/s 161,515.36 161,848.72 +0.21% 完全一致(无任何降频)
4核 并发算力 ops/s 265,248.45 265,519.94 +0.10% 完全一致(核心无限制)
磁盘顺序写入 (fsync) MB/s 251.49 243.66 -3.11% 极小波动(属于闪存正常抖动)
磁盘顺序读取 MB/s 973.73 961.14 -1.29% 基本持平(内存页缓存正常发挥)

轮次明细数据

  • 单核性能:
    • 前台:Round 1: 163,005 | Round 2: 161,162 | Round 3: 160,378
    • 后台:Round 1: 163,623 | Round 2: 161,225 | Round 3: 160,697
  • 4核并发:
    • 前台:Round 1: 202,545 | Round 2: 293,501 | Round 3: 299,698
    • 后台:Round 1: 202,386 | Round 2: 299,143 | Round 3: 295,030

数据极其直观:切到后台后,单核仅波动 +0.21%,多核并发仅波动 +0.10%,两者性能在统计学上几乎完全重合!


三、为什么能做到后台 100% 满血?关键合理配置解析

默认情况下,Android 原生的 Doze 机制(打盹模式)、App Standby(应用待机分组) 以及 Phantom Process Killer(幽灵进程查杀) 会在 App 退至后台后采取以下限制:

  1. 限制网络访问。
  2. 将进程放入低优先级的 cpuset(限制仅允许在能效小核运行,大核剥离)。
  3. 降低 CPU 调度配额(cpu.cfs_quota_us 限制)。
  4. 杀掉派生进程数量过多的后台容器进程。

要让 Termux 在后台持续发挥出与前台毫无差别的性能,必须做好以下关键配置:

1. 开启 Termux 常驻唤醒锁 (Wake Lock)

确保在息屏或后台时 CPU 不会进入休眠状态:

termux-wake-lock

提示:执行后通知栏会出现常驻通知,阻止系统内核进入挂起睡眠(Deep Sleep)。

2. 彻底关闭 Android 系统电池优化

  • 手机设置 -> 应用 -> Termux -> 电池/省电策略,设置为 “无限制” (Unrestricted / 允许完全后台高耗电)。
  • 允许自启动、允许关联启动、允许后台运行。
  • 这样系统电源管理服务(PowerManagerService)在调度进程时,不会把 Termux 强行降级为 CACHED 或极低权重的后台冻结桶。

3. 解除 Android 12+ 幽灵进程查杀 (Phantom Process Killer)

Android 12 开始引入了对单个应用后台派生子进程最多 32 个的硬限制,且会监控后台 CPU 使用率。如果你通过 Termux 运行 PRoot、编译器或并发任务,请务必通过 ADB 执行一次:

adb shell device_config set_sync_disabled_for_tests persistent
adb shell /system/bin/device_config put activity_manager max_phantom_processes 2147483647

这彻底杜绝了后台高负载运行被系统 OOM killer 无情 SIGKILL 的问题。

4. PRoot 环境与 Linux cgroup 调优

如果你在 Termux 内挂载了完整 Linux(如 Ubuntu),确保运行命令是在后台有持久会话托底(如 tmux 或配合守护进程)。此外,由于 Linux 拥有独立的页缓存(Page Cache)机制,只要宿主未压制 IO 调度,900+ MB/s 的读取速率和 240+ MB/s 的落盘性能就能全额保留。


四、结语

实测证明,Android 并不是一台只能跑轻量前端 App 的“大玩具”。只要合理解除系统省电策略与后台调度羁绊,Termux 完全具备充当全天候、满血 8 核移动 Linux 工作站的能力。

即使你在前台使用其他软件,后台的编译任务、模型微调推理或自动化智能体服务,依然能以 100% 的硬件性能飞速运转!