OpenHarmony ETS Utils 模块
1. 模块概述
源码:https://gitee.com/openharmony/commonlibrary_ets_utils
1.1 功能与目标
1.1.1 主要功能
OpenHarmony ETS Utils 是一个综合性的工具库,为OpenHarmony系统提供核心的JavaScript/TypeScript运行时工具支持。该模块包含以下四个主要子模块:
| 子模块 | 功能描述 |
|---|
| js_api_module | 提供URL解析、URI处理、XML解析/序列化、Buffer数据处理等API功能 |
| js_util_module | 提供通用工具类,包括容器数据结构、JSON处理、流处理等 |
| js_sys_module | 提供系统级功能,包括进程管理、控制台输出、定时器等 |
| js_concurrent_module | 提供并发编程支持,包括TaskPool任务池、Worker线程、异步锁等 |
1.1.2 设计目标
- 高性能: 采用C++实现核心功能,通过N-API与JavaScript层交互
- 跨平台: 支持OHOS、Windows、Mac、iOS、Android等多平台
- 线程安全: 提供完善的并发控制机制
- 易用性: 提供简洁的JavaScript API接口
1.1.3 使用场景
- URL/URI解析与处理
- XML文档的解析与生成
- 二进制数据的Buffer操作
- 多线程任务调度与执行
- 进程信息获取与管理
- 定时器功能实现
- 异步锁与并发控制
1.2 系统位置
1.2.1 在系统中的位置
ETS Utils模块位于OpenHarmony的commonlibrary子系统中,是系统的核心基础模块,为上层应用和框架提供基础工具支持。
1.2.2 与其他模块的关系 - 系统框图
┌─────────────────────────────────────────────────────────────────┐ │ 应用层 (Application Layer) │ ├─────────────────────────────────────────────────────────────────┤ │ 框架层 (Framework Layer) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ ACE Engine │ │ ArkUI │ │ 其他框架 │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ ├─────────┼────────────────┼────────────────┼─────────────────────┤ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ ETS Utils 模块 │ │ │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────┐ │ │ │ │ │js_api_mod │ │js_util_mod │ │js_sys_mod │ │js_conc │ │ │ │ │ │ ·URL │ │ ·容器 │ │ ·Process │ │·TaskPool│ │ │ │ │ │ ·URI │ │ ·JSON │ │ ·Console │ │·Worker │ │ │ │ │ │ ·XML │ │ ·Stream │ │ ·Timer │ │·Locks │ │ │ │ │ │ ·Buffer │ │ │ │ │ │ │ │ │ │ │ └────────────┘ └────────────┘ └────────────┘ └────────┘ │ │ │ └──────────────────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ 系统服务层 (System Services) │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ NAPI │ │ libuv │ │ FFRT │ │ HiLog │ │ HiSysEv │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ └─────────────────────────────────────────────────────────────────┘
1.2.3 依赖组件
| 依赖组件 | 用途 |
|---|
| napi | N-API接口,实现JS与C++交互 |
| libuv | 异步I/O和事件循环 |
| ffrt | 函数流运行时,任务调度 |
| hilog | 日志系统 |
| hisysevent | 系统事件上报 |
| icu | 国际化支持 |
| openssl | 加密支持 |
| libxml2 | XML解析库 |
1.3 设计思路与模式
1.3.1 设计思路
分层架构设计
- JavaScript层: 提供用户友好的API接口
- N-API绑定层: 实现JS与C++的桥接
- C++核心层: 实现核心业务逻辑
- 平台适配层: 处理跨平台差异
模块化设计
- 各子模块功能独立,低耦合
- 统一的错误处理机制
- 共享公共工具类
异步优先设计
- 大量使用异步操作避免阻塞
- 基于libuv实现事件驱动
- 支持Promise和回调两种异步模式
1.3.2 设计模式
| 设计模式 | 应用场景 | 示例 |
|---|
| 单例模式 | 全局唯一管理器 | TaskManager::GetInstance() |
| 工厂模式 | 对象创建 | Task::GenerateTask() |
| 观察者模式 | 事件监听 | Worker的事件监听机制 |
| 策略模式 | 任务调度策略 | 任务优先级调度 |
| 状态模式 | 状态管理 | Task的ExecuteState状态机 |
| 命令模式 | 任务封装 | TaskInfo封装任务信息 |
2. 模块结构
2.1 源文件与头文件
2.1.1 js_concurrent_module (并发模块)
TaskPool 子模块
| 文件 | 功能描述 |
|---|
task.h/cpp | 任务类定义,封装可执行任务 |
taskpool.h/cpp | 任务池主入口,提供Execute/Cancel等API |
task_manager.h/cpp | 任务管理器,单例模式,管理所有任务和工作线程 |
task_queue.h/cpp | 任务队列,按优先级管理待执行任务 |
task_group.h/cpp | 任务组,支持批量任务执行 |
sequence_runner.h/cpp | 序列运行器,保证任务顺序执行 |
async_runner.h/cpp | 异步运行器,支持异步任务执行 |
worker.h/cpp | 工作线程,执行具体任务 |
thread.h/cpp | 线程基类,封装uv_thread |
Worker 子模块
| 文件 | 功能描述 |
|---|
worker.h/cpp | Worker线程实现,支持消息传递 |
worker_runner.h/cpp | Worker运行器 |
message_queue.h/cpp | 消息队列,线程间通信 |
Utils 子模块
| 文件 | 功能描述 |
|---|
utils.h/cpp | 工具类入口 |
locks/async_lock.h/cpp | 异步锁实现 |
locks/async_lock_manager.h/cpp | 异步锁管理器 |
locks/lock_request.h/cpp | 锁请求封装 |
condition/*.h/cpp | 条件变量实现 |
2.1.2 js_api_module (API模块)
| 子目录 | 主要文件 | 功能描述 |
|---|
url/ | js_url.h/cpp | URL解析与操作 |
uri/ | js_uri.h/cpp | URI解析与操作 |
xml/ | js_xml.h/cpp | XML序列化与解析 |
buffer/ | js_buffer.h/cpp | Buffer数据操作 |
convertxml/ | js_convertxml.h/cpp | XML转换工具 |
2.1.3 js_sys_module (系统模块)
| 子目录 | 主要文件 | 功能描述 |
|---|
process/ | js_process.h/cpp | 进程信息获取与管理 |
console/ | console.h/cpp | 控制台输出 |
timer/ | sys_timer.h/cpp | 定时器实现 |
dfx/ | native_module_dfx.cpp | DFX诊断功能 |
2.1.4 js_util_module (工具模块)
| 子目录 | 主要文件 | 功能描述 |
|---|
container/ | 各容器实现文件 | ArrayList, HashMap, TreeMap等容器 |
json/ | native_module_json.cpp | JSON处理 |
stream/ | native_module_stream.cpp | 流处理 |
util/ | js_util.h/cpp | 通用工具函数 |
2.2 类、结构体、函数与方法
2.2.1 核心类设计
Task 类 (任务类)
classTask{public:// 构造函数Task()=default;Task(napi_env env,TaskType taskType,constchar*name);~Task()=default;// 静态工厂方法staticTask*GenerateTask(napi_env env,napi_value task,napi_value func,napi_value name,napi_value*args,size_t argc);staticTask*GenerateFunctionTask(napi_env env,napi_value func,napi_value*args,size_t argc,TaskType type);staticTaskInfo*GenerateTaskInfo(napi_env env,napi_value func,napi_value args,napi_value transferList,napi_value cloneList,Priority priority,booldefaultTransfer=true,booldefaultCloneSendable=false);// N-API 回调方法staticnapi_valueTaskConstructor(napi_env env,napi_callback_info cbinfo);staticnapi_valueSetTransferList(napi_env env,napi_callback_info cbinfo);staticnapi_valueIsCanceled(napi_env env,napi_callback_info cbinfo);staticnapi_valueSendData(napi_env env,napi_callback_info cbinfo);staticnapi_valueAddDependency(napi_env env,napi_callback_info cbinfo);staticnapi_valueRemoveDependency(napi_env env,napi_callback_info cbinfo);// 状态管理方法boolUpdateTaskStateToWaiting();boolUpdateTaskStateToRunning();boolUpdateTaskStateToCanceled();boolUpdateTaskStateToFinished();// 任务属性boolIsRepeatableTask()const;boolIsGroupTask()const;boolIsLongTask()const;boolIsPeriodicTask()const;public:// 成员变量napi_env env_=nullptr;std::atomic<TaskType>taskType_{TaskType::TASK};std::string name_{};uint32_ttaskId_{};std::atomic<ExecuteState>taskState_{ExecuteState::NOT_FOUND};uint64_tgroupId_{};uint64_tseqRunnerId_{};TaskInfo*currentTaskInfo_{};std::list<TaskInfo*>pendingTaskInfos_{};void*result_=nullptr;std::atomic<bool>success_{true};void*worker_{nullptr};// ... 更多成员};
TaskManager 类 (任务管理器 - 单例)
classTaskManager{public:// 单例获取staticTaskManager&GetInstance();// 任务管理voidStoreTask(Task*task);boolRemoveTask(uint32_ttaskId);Task*GetTask(uint32_ttaskId);voidEnqueueTaskId(uint32_ttaskId,Priority priority=Priority::DEFAULT);std::pair<uint32_t,Priority>DequeueTaskId();voidCancelTask(napi_env env,uint32_ttaskId);// Worker管理voidNotifyWorkerIdle(Worker*worker);voidNotifyWorkerCreated(Worker*worker);voidNotifyWorkerRunning(Worker*worker);voidRemoveWorker(Worker*worker);// 负载均衡voidInitTaskManager(napi_env env);voidUpdateExecutedInfo(uint64_tduration);voidTryTriggerExpand();// 状态查询uint32_tGetTaskNum();uint32_tGetIdleWorkers();uint32_tGetThreadNum();private:TaskManager();~TaskManager();// 私有成员std::unordered_map<uint32_t,Task*>tasks_{};std::unordered_set<Worker*>workers_{};std::unordered_set<Worker*>idleWorkers_{};std::array<std::unique_ptr<ExecuteQueue>,Priority::NUMBER>taskQueues_{};// ... 更多成员};
Worker 类 (工作线程)
classWorker{public:// 状态枚举enumRunnerState{STARTING,RUNNING,TERMINATEING,TERMINATED};enumHostState{ACTIVE,INACTIVE};enumListenerMode{ONCE,PERMANENT};enumScriptMode{CLASSIC,MODULE};// 构造与析构Worker(napi_env env,napi_ref thisVar);~Worker();// 静态方法 - N-API回调staticnapi_valuePostMessage(napi_env env,napi_callback_info cbinfo);staticnapi_valueTerminate(napi_env env,napi_callback_info cbinfo);staticnapi_valueOn(napi_env env,napi_callback_info cbinfo);staticnapi_valueOff(napi_env env,napi_callback_info cbinfo);staticnapi_valueConstructor(napi_env env,napi_callback_info cbinfo,boollimitSign=false,WorkerVersion version=WorkerVersion::NONE);// 消息处理staticvoidHostOnMessage(constuv_async_t*req);staticvoidWorkerOnMessage(constuv_async_t*req);staticvoidExecuteInThread(constvoid*data);// 状态管理boolUpdateWorkerState(RunnerState state);boolIsRunning()const;boolIsTerminated()const;private:// 私有成员std::string script_{};std::string name_{};MessageQueue workerMessageQueue_{};MessageQueue hostMessageQueue_{};std::atomic<RunnerState>runnerState_{STARTING};napi_env hostEnv_{nullptr};napi_env workerEnv_{nullptr};// ... 更多成员};
URL 类
classURL{public:// 构造函数explicitURL(conststd::string&input);URL(conststd::string&input,conststd::string&base);URL(conststd::string&input,constURL&base);~URL(){}// Getter方法napi_valueGetHostname(napi_env env)const;napi_valueGetSearch(napi_env env)const;napi_valueGetUsername(napi_env env)const;napi_valueGetPassword(napi_env env)const;napi_valueGetFragment(napi_env env)const;napi_valueGetScheme(napi_env env)const;napi_valueGetPath(napi_env env)const;napi_valueGetPort(napi_env env)const;napi_valueGetHost(napi_env env)const;// Setter方法voidSetHostname(conststd::string&input);voidSetUsername(conststd::string&input);voidSetPassword(conststd::string&input);voidSetScheme(conststd::string&input);voidSetFragment(conststd::string&input);voidSetSearch(conststd::string&input);voidSetHost(conststd::string&input);voidSetPort(conststd::string&input);voidSetHref(conststd::string&input);voidSetPath(conststd::string&input);private:UrlData urlData_;std::bitset<11>flags_;};
Buffer 类
classBuffer{public:Buffer()=default;virtual~Buffer();// 初始化方法voidInit(uint32_tsize);voidInit(Buffer*buffer);voidInit(Buffer*pool,unsignedintpoolOffset,unsignedintlength);voidInit(uint8_t*buffer,unsignedintbyteOffset,unsignedintlength);// 属性访问unsignedintGetLength();voidSetLength(unsignedintlen);unsignedintGetByteOffset();int32_tGet(uint32_tindex);voidSet(uint32_tindex,uint8_tvalue);// 读写方法voidWriteInt32BE(int32_tvalue,uint32_toffset);voidWriteInt32LE(int32_tvalue,uint32_toffset);int32_tReadInt32BE(uint32_toffset);int32_tReadInt32LE(uint32_toffset);// 字符串操作unsignedintWriteString(std::string value,unsignedintsize);unsignedintWriteString(std::string value,unsignedintoffset,unsignedintlength,std::string encoding);// Buffer操作voidSubBuffer(Buffer*tBuf,uint32_tstart,uint32_tend);uint32_tCopy(Buffer*tBuf,uint32_ttStart,uint32_tsStart,uint32_tsEnd);intCompare(Buffer*tBuf,uint32_ttargetStart,uint32_tsourceStart,uint32_tlength);private:uint8_t*raw_{nullptr};unsignedintbyteOffset_{};unsignedintlength_{};boolneedRelease_{true};};
2.2.2 关键结构体
// 任务执行状态enumExecuteState{NOT_FOUND,// 未找到WAITING,// 等待中RUNNING,// 执行中CANCELED,// 已取消FINISHED,// 已完成DELAYED,// 延迟中ENDING// 结束中};// 任务类型enumTaskType{TASK,// 普通任务FUNCTION_TASK,// 函数任务SEQRUNNER_TASK,// 序列运行器任务COMMON_TASK,// 通用任务GROUP_COMMON_TASK,// 组通用任务GROUP_FUNCTION_TASK,// 组函数任务ASYNCRUNNER_TASK// 异步运行器任务};// 任务优先级enumPriority{HIGH=0,// 高优先级MEDIUM=1,// 中优先级LOW=2,// 低优先级IDLE=3,// 空闲优先级DEFAULT=MEDIUM,NUMBER=4};// 任务信息结构体structTaskInfo{napi_deferred deferred=nullptr;Priority priority=Priority::DEFAULT;void*serializationFunction=nullptr;void*serializationArguments=nullptr;};// 任务组信息structGroupInfo{uint32_tfinishedTaskNum{};napi_ref resArr{nullptr};Priority priority{Priority::DEFAULT};napi_deferred deferred{nullptr};int32_tfailedIndex{-1};};// 定时器回调信息structTimerCallbackInfo{napi_env env_{nullptr};uint32_ttId_{};int32_ttimeout_{};napi_ref callback_{};boolrepeat_{};uv_timer_t*timeReq_{nullptr};size_t argc_{};napi_ref*argv_{nullptr};};
2.2.3 继承关系图
2.3 类图
2.3.1 TaskPool 模块类图
2.3.2 Worker 模块类图
2.3.3 API 模块类图
2.4 模块内部依赖框图
┌─────────────────────────────────────────────────────────────────────────────────┐ │ 模块内部依赖关系图 │ ├─────────────────────────────────────────────────────────────────────────────────┤ │ │ │ js_concurrent_module │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ taskpool/ │─────►│ common/ │◄─────│ worker/ │ │ │ │ │ │ │ │ helper/ │ │ │ │ │ │ │ └──────┬──────┘ └─────────────┘ └──────┬──────┘ │ │ │ │ │ ▲ │ │ │ │ │ │ │ │ │ │ │ │ ▼ │ ▼ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ utils/ │─────►│ tools/ │◄─────│ platform/ │ │ │ │ │ │ locks/ │ │ log.h │ │ │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ │ │ js_api_module │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ url/ │ │ uri/ │ │ xml/ │ │ │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ │ │ │ │ │ └────────────────────┼────────────────────┘ │ │ │ │ ▼ │ │ │ │ ┌─────────────┐ │ │ │ │ ┌─────────────┐ │ buffer/ │ ┌─────────────┐ │ │ │ │ │ convertxml/ │─────►│ converter │◄─────│ fastbuffer/ │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ │ │ js_sys_module │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ process/ │ │ console/ │ │ timer/ │ │ │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ │ │ │ │ │ └────────────────────┼────────────────────┘ │ │ │ │ ▼ │ │ │ │ ┌─────────────┐ │ │ │ │ │ dfx/ │ │ │ │ │ └─────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────────┘
3. 模块间交互
3.1 交互描述
3.1.1 与NAPI的交互
所有模块都通过N-API与JavaScript层进行交互:
- 使用
napi_value进行值传递 - 使用
napi_callback_info获取回调参数 - 使用
napi_env管理JavaScript执行环境 - 使用
napi_ref管理JavaScript对象引用
3.1.2 与libuv的交互
并发模块大量使用libuv进行异步操作:
uv_async_t: 异步信号通知uv_timer_t: 定时器uv_thread_t: 线程管理uv_loop_t: 事件循环
3.1.3 异步处理机制流程图
3.1.4 多线程处理方式
| 机制 | 用途 | 实现方式 |
|---|
| TaskPool | 任务并行执行 | 线程池 + 任务队列 |
| Worker | 独立线程执行 | 独立线程 + 消息传递 |
| AsyncLock | 异步锁 | Promise + 等待队列 |
| SequenceRunner | 顺序执行 | 任务队列 + 依赖管理 |
3.1.5 事件驱动机制
Worker模块采用事件驱动机制:
// 事件类型-"message"// 消息事件-"error"// 错误事件-"messageerror"// 消息错误事件-"exit"// 退出事件// 监听方式worker.on("message",callback);// 持久监听worker.once("message",callback);// 单次监听worker.off("message");// 取消监听
3.2 外部依赖框图
4. 状态机转换图
4.1 Task 状态机模型
4.1.1 状态定义
| 状态 | 值 | 描述 |
|---|
| NOT_FOUND | 0 | 任务未找到/初始状态 |
| WAITING | 1 | 等待执行 |
| RUNNING | 2 | 正在执行 |
| CANCELED | 3 | 已取消 |
| FINISHED | 4 | 已完成 |
| DELAYED | 5 | 延迟执行中 |
| ENDING | 6 | 结束中 |
4.1.2 状态机树图
4.1.3 状态切换规则
| 当前状态 | 目标状态 | 触发条件 | 触发方法 |
|---|
| NOT_FOUND | WAITING | 任务入队 | UpdateTaskStateToWaiting() |
| NOT_FOUND | DELAYED | 延迟任务入队 | UpdateTaskStateToDelayed() |
| NOT_FOUND | CANCELED | 任务取消 | UpdateTaskStateToCanceled() |
| WAITING | RUNNING | 工作线程获取任务 | UpdateTaskStateToRunning() |
| WAITING | CANCELED | 用户取消任务 | UpdateTaskStateToCanceled() |
| DELAYED | WAITING | 延迟时间到达 | UpdateTaskStateToWaiting() |
| DELAYED | CANCELED | 用户取消任务 | UpdateTaskStateToCanceled() |
| RUNNING | FINISHED | 任务执行完成 | UpdateTaskStateToFinished() |
| RUNNING | CANCELED | 任务执行中取消 | UpdateTaskStateToCanceled() |
| RUNNING | ENDING | 任务开始结束 | UpdateTaskStateToEnding() |
| ENDING | FINISHED | 结束处理完成 | UpdateTaskStateToFinished() |
4.2 Worker 状态机模型
4.2.1 RunnerState 状态机
4.2.2 HostState 状态机
4.3 AsyncLock 状态机模型
4.3.1 LockMode 状态
4.4 状态机转换图 (综合)
5. 接口设计
5.1 公共接口
5.1.1 TaskPool 接口
| 接口名称 | 功能描述 | 参数 | 返回值 |
|---|
execute(task, priority?) | 执行任务 | task: Task对象, priority: 优先级 | Promise |
execute(func, ...args) | 执行函数任务 | func: 函数, args: 参数 | Promise |
executeDelayed(delay, task, priority?) | 延迟执行任务 | delay: 延迟毫秒, task: Task对象 | Promise |
executePeriodically(period, task, priority?) | 周期执行任务 | period: 周期毫秒, task: Task对象 | void |
cancel(task) | 取消任务 | task: Task对象 | void |
terminateTask(task) | 终止长任务 | task: Task对象 | void |
getTaskPoolInfo() | 获取任务池信息 | 无 | TaskPoolInfo |
isConcurrent(func) | 判断是否为并发函数 | func: 函数 | boolean |
5.1.2 Task 接口
| 接口名称 | 功能描述 | 参数 | 返回值 |
|---|
constructor(func, ...args) | 创建任务 | func: 函数, args: 参数 | Task |
setTransferList(list) | 设置转移列表 | list: ArrayBuffer数组 | void |
setCloneList(list) | 设置克隆列表 | list: 可克隆对象数组 | void |
isCanceled() | 检查是否已取消 | 无 | boolean |
isDone() | 检查是否已完成 | 无 | boolean |
sendData(...args) | 发送数据 | args: 数据 | void |
onReceiveData(callback) | 接收数据回调 | callback: 回调函数 | void |
addDependency(task) | 添加依赖 | task: 依赖任务 | void |
removeDependency(task) | 移除依赖 | task: 依赖任务 | void |
onEnqueued(callback) | 入队回调 | callback: 回调函数 | void |
onStartExecution(callback) | 开始执行回调 | callback: 回调函数 | void |
onExecutionSucceeded(callback) | 执行成功回调 | callback: 回调函数 | void |
onExecutionFailed(callback) | 执行失败回调 | callback: 回调函数 | void |
5.1.3 Worker 接口
| 接口名称 | 功能描述 | 参数 | 返回值 |
|---|
constructor(script, options?) | 创建Worker | script: 脚本路径, options: 配置 | Worker |
postMessage(data, transfer?) | 发送消息 | data: 数据, transfer: 转移列表 | void |
postMessageWithSharedSendable(data) | 发送共享消息 | data: 可共享数据 | void |
terminate() | 终止Worker | 无 | void |
on(type, callback) | 添加事件监听 | type: 事件类型, callback: 回调 | void |
once(type, callback) | 添加单次监听 | type: 事件类型, callback: 回调 | void |
off(type, callback?) | 移除事件监听 | type: 事件类型, callback: 回调 | void |
addEventListener(type, callback) | 添加事件监听 | type: 事件类型, callback: 回调 | void |
removeEventListener(type, callback?) | 移除事件监听 | type: 事件类型, callback: 回调 | void |
dispatchEvent(event) | 分发事件 | event: 事件对象 | boolean |
registerGlobalCallObject(name, obj) | 注册全局调用对象 | name: 名称, obj: 对象 | void |
unregisterGlobalCallObject(name) | 注销全局调用对象 | name: 名称 | void |
5.1.4 URL 接口
| 接口名称 | 功能描述 | 参数 | 返回值 |
|---|
constructor(url, base?) | 创建URL | url: URL字符串, base: 基础URL | URL |
href | 完整URL | getter/setter | string |
origin | 来源 | getter | string |
protocol | 协议 | getter/setter | string |
username | 用户名 | getter/setter | string |
password | 密码 | getter/setter | string |
host | 主机(含端口) | getter/setter | string |
hostname | 主机名 | getter/setter | string |
port | 端口 | getter/setter | string |
pathname | 路径 | getter/setter | string |
search | 查询字符串 | getter/setter | string |
searchParams | 查询参数 | getter | URLSearchParams |
hash | 哈希 | getter/setter | string |
toString() | 转字符串 | 无 | string |
toJSON() | 转JSON | 无 | string |
5.1.5 Buffer 接口
| 接口名称 | 功能描述 | 参数 | 返回值 |
|---|
alloc(size, fill?, encoding?) | 分配Buffer | size: 大小, fill: 填充值 | Buffer |
allocUnsafe(size) | 不安全分配 | size: 大小 | Buffer |
from(data, encoding?) | 从数据创建 | data: 数据, encoding: 编码 | Buffer |
concat(list, totalLength?) | 连接Buffer | list: Buffer数组, totalLength: 总长度 | Buffer |
compare(buf1, buf2) | 比较Buffer | buf1, buf2: Buffer | number |
isBuffer(obj) | 判断是否Buffer | obj: 对象 | boolean |
byteLength(string, encoding?) | 字节长度 | string: 字符串, encoding: 编码 | number |
copy(target, targetStart?, sourceStart?, sourceEnd?) | 复制 | target: 目标Buffer | number |
slice(start?, end?) | 切片 | start: 起始, end: 结束 | Buffer |
write(string, offset?, length?, encoding?) | 写入字符串 | string: 字符串 | number |
toString(encoding?, start?, end?) | 转字符串 | encoding: 编码 | string |
readInt32BE(offset) | 读取32位整数(大端) | offset: 偏移 | number |
writeInt32BE(value, offset) | 写入32位整数(大端) | value: 值, offset: 偏移 | number |
5.1.6 Process 接口
| 接口名称 | 功能描述 | 参数 | 返回值 |
|---|
uid | 用户ID | getter | number |
gid | 组ID | getter | number |
euid | 有效用户ID | getter | number |
egid | 有效组ID | getter | number |
pid | 进程ID | getter | number |
ppid | 父进程ID | getter | number |
tid | 线程ID | getter | number |
cwd() | 当前工作目录 | 无 | string |
chdir(dir) | 改变工作目录 | dir: 目录 | void |
uptime() | 运行时间 | 无 | number |
kill(pid, signal) | 发送信号 | pid: 进程ID, signal: 信号 | boolean |
exit(code) | 退出进程 | code: 退出码 | void |
abort() | 中止进程 | 无 | void |
isIsolatedProcess() | 是否隔离进程 | 无 | boolean |
is64Bit() | 是否64位 | 无 | boolean |
getUidForName(name) | 通过名称获取UID | name: 用户名 | number |
getThreadPriority(tid) | 获取线程优先级 | tid: 线程ID | number |
getSystemConfig(name) | 获取系统配置 | name: 配置名 | number |
getEnvironmentVar(name) | 获取环境变量 | name: 变量名 | string |
5.1.7 Timer 接口
| 接口名称 | 功能描述 | 参数 | 返回值 |
|---|
setTimeout(callback, delay?, ...args) | 设置超时 | callback: 回调, delay: 延迟 | number |
setInterval(callback, delay?, ...args) | 设置间隔 | callback: 回调, delay: 间隔 | number |
clearTimeout(id) | 清除超时 | id: 定时器ID | void |
clearInterval(id) | 清除间隔 | id: 定时器ID | void |
5.1.8 AsyncLock 接口
| 接口名称 | 功能描述 | 参数 | 返回值 |
|---|
constructor(name?) | 创建异步锁 | name: 锁名称 | AsyncLock |
lockAsync(callback, mode?, options?) | 异步加锁 | callback: 回调, mode: 锁模式 | Promise |
query() | 查询锁状态 | 无 | LockState |
5.2 数据交换接口
5.2.1 序列化协议
TaskPool和Worker使用序列化机制进行数据传递:
// 序列化支持的类型-基本类型:number,string,boolean,null,undefined-对象类型:Object,Array,Map,Set-特殊类型:ArrayBuffer,TypedArray,DataView-可转移对象:ArrayBuffer(通过transferList)-可共享对象:SharedArrayBuffer,Sendable对象
5.2.2 消息格式
// Worker消息格式interfaceMessageEvent{data:any;// 消息数据type:string;// 消息类型}// 错误消息格式interfaceErrorEvent{message:string;// 错误信息filename:string;// 文件名lineno:number;// 行号colno:number;// 列号error:Error;// 错误对象}
5.3 接口调用时序图
5.3.1 TaskPool.execute 时序图
5.3.2 Worker 消息传递时序图
5.3.3 AsyncLock 加锁时序图
5.3.4 Timer 定时器时序图
附录
A. 错误码定义
| 错误码 | 描述 |
|---|
| 10200001 | 值超出范围 |
| 10200002 | 参数无效 |
| 10200003 | Worker初始化失败 |
| 10200004 | Worker实例不支持此API |
| 10200005 | Worker未运行 |
| 10200006 | 序列化异常 |
| 10200007 | Worker文件路径无效 |
| 10200014 | 任务已执行 |
| 10200015 | 取消不存在的任务 |
| 10200016 | 任务不支持取消 |
| 10200034 | 任务组已执行 |
B. 平台兼容性
| 平台 | 支持状态 | 备注 |
|---|
| OpenHarmony | ✅ 完全支持 | 主要目标平台 |
| Windows | ✅ 支持 | 开发调试用 |
| macOS | ✅ 支持 | 开发调试用 |
| iOS | ⚠️ 部分支持 | 部分功能受限 |
| Android | ⚠️ 部分支持 | 部分功能受限 |
C. 性能指标
| 指标 | 参考值 | 说明 |
|---|
| ROM占用 | ~1400KB | 编译后代码大小 |
| RAM占用 | ~4096KB | 运行时内存占用 |
| 线程池大小 | CPU核心数-1 | 动态调整 |
| 任务队列容量 | 无限制 | 受内存限制 |