主线程执行器
- 默认:
Executors.newSingleThreadExecutor()。 - 自定义:
FluxonRuntime#setPrimaryThreadExecutor(Executor executor),常用于绑定游戏/GUI 的主线程调度器。 - 生效范围:被标记为主线程的函数/扩展。
例如
registerPrimarySyncFunction/registerSyncExtensionFunction,或@Export(sync = true)。
线程池管理器
- 位于
core/src/main/java/org/tabooproject/fluxon/runtime/concurrent/ThreadPoolManager.java,负责异步/调度任务。 - 能力:
submitAsync/runAsyncschedule/scheduleAtFixedRateshutdowngetActiveTaskCount():观测任务堆积
- 策略:队列满时启用
CallerRunsPolicy,需评估宿主线程承受能力。
函数目录导出
- 命令:
./gradlew :core:dumpFluxonCatalog输出core/build/fluxon-functions.json。 - 同步:
vscode-extension/scripts/sync-catalog.js复制到扩展数据目录,驱动补全。 - 字段与语义以 函数目录 为准;新增/改名后务必重跑并同步。
环境调试
Environment#getRootFunctions()/getRootExtensionFunctions()/getRootVariables():检查脚本可见符号。FunctionContext#toString():定位 target 与实参。FluxonRuntime#getSystemVariables():查看全局对象(如GlobalObject)。
关闭与生命周期
- 宿主退出或插件卸载时,建议调用
ThreadPoolManager#shutdown()释放线程池资源。 - 若你创建了自定义的主线程执行器,也应按宿主的生命周期进行关闭与回收。
常见问题
- 新增函数未生效? 注册后需重新
newEnvironment()触发 bake。 - 主线程函数仍跑在后台?
核对是否使用
registerPrimarySyncFunction/registerSyncExtensionFunction。 并确认替换了主线程执行器。 - 异步堵塞?
CallerRunsPolicy出现表示队列已满,需拆分任务或扩容宿主线程资源。