最終更新 1786343145

修正履歴 5f55a52be5c5a2a6c587042e9f37c9dbbbd77b01

Qwen36-MTP-System-Power.md Raw
📊 Quick Energy Impact Reference

Category                Avg Power Draw  Recommended BG Behavior
───────────────────────────────────────────────────────────────────────────
AI Inference            🔋🔋🔋🔋🔋      Throttle rate; pause when idle
3D Physics/Rigidbodies  🔋🔋🔋🔋🔋      Disable off-tab; hard stop
Multiplayer Netcode     🔋🔋🔋          Keep alive; reduce tick/packet rate
Video Decode/Encode     🔋🔋🔋🔋        Pause while hidden
Clipboard/OS Sync       🔋              Event-driven only
Background Audio        🔋              Safe to run continuously
Timers/State Stores     🔋              Negligible

Key Concepts for concurrency/execution options:

  • call_deferred: Schedules a method to run at the end of the current frame/physics step. Good for safe scene tree manipulation, avoiding "node doesn't exist yet" errors.
  • await: Godot 4's async/await pattern. Replaces yield. Used for non-blocking waits (signals, timers, functions returning Future). Keeps main thread responsive.
  • Signals: Native Godot event system. Decouples systems, enables reactive UI/engine updates without polling. Essential for multi-tab state management.
  • Threading (Thread/Callable.bind()/@thread_sync): For heavy CPU tasks (AI inference, network I/O) that shouldn't block the main thread.
  • Process Modes (PROCESS_MODE_ALWAYS, INHERIT, PAUSE): Controls when nodes update across different UI states (modals, hidden tabs).
  • State Machines / Context Managers: Managing tab switches, engine lifecycles, and background vs active states without race conditions.

Concurrency/execution Summary

  • call_deferred: Scene Tree Safety
  • await & Futures: Non-Blocking Execution
  • Signals: Reactive State Management
  • Threading + Main Thread Sync: Heavy Workloads
  • Process Modes: Tab Visibility vs Runtime

Recommended Pattern for EnvoyOS

  • Central EnvoyStateManager (RefCounted/Node) that tracks tab focus, engine contexts, and energy tiers.
  • Use signals for all cross-module communication.
  • await only for explicit async operations (configs, network handshakes).
  • call_deferred or signals for scene tree edits during tab swaps.
  • Threading for heavy computations; marshal results back via signals.
  • Process modes tied to engine context (active/bg/off).
Tool             Purpose                                                    When to Use in EnvoyOS
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
call_deferred()  Schedules a method to run at the end of the current frame  Safe scene tree edits during tab swaps, avoiding "node doesn't exist" or layout-calculation conflicts
await + Futures           Non-blocking suspension until an event completes              Loading configs, network handshakes, waiting for UI/engines to
initialize without freezing the main thread
Signals                   Zero-polling, event-driven communication                      Decoupling tab focus from engine states, energy tier updates,
cross-module notifications
Threading + @thread_sync  Offload heavy CPU work off the main thread                    AI inference, video decoding, clipboard polling, VOIP packet
processing
ProcessMode               Controls when _process(), _physics_process(), and inputs run  Tying engine runtime to tab visibility vs true background execution