同步任务是指在多个线程之间协调执行的任务,其目的是确保多个任务按照一定的顺序和规则执行,例如使用锁来防止数据竞争。
同步任务的实现需要考虑多个线程之间的协作和同步,以确保数据的正确性和程序的正确执行。
由于TaskPool偏向于单个独立的任务,因此当各个同步任务之间相对独立时推荐使用TaskPool,例如一系列导入的静态方法,或者单例实现的方法。如果同步任务之间有关联性,则需要使用Worker,例如无法单例创建的类对象实现的方法。
使用TaskPool处理同步任务
当调度独立的任务,或者一系列任务为静态方法实现,或者可以通过单例构造唯一的句柄或类对象,可在不同任务线程之间使用时,推荐使用TaskPool。
说明
由于 Actor模型 不同线程间内存隔离的特性,普通单例无法在不同线程间使用。可以通过共享模块导出单例解决该问题。
-
定义并发函数,内部调用同步方法。
-
创建任务 Task ,通过 execute() 接口执行该任务,并对任务返回的结果进行操作。
-
执行并发操作。
模拟一个包含同步调用的单实例类。
// Handle.ets 代码
"use shared"
@Sendable
export default class Handle {
private static instance: Handle = new Handle;
static getInstance(): Handle {
// 返回单例对象
return Handle.instance;
}
static syncGet(): void {
// 同步Get方法
}
static syncSet(num: number): number {
// 模拟同步步骤1
console.info("taskpool: this is 1st print!");
// 模拟同步步骤2
console.info("taskpool: this is 2nd print!");
return ++num;
}
static syncSet2(num: number): number {
// 模拟同步步骤1
console.info("taskpool: this is syncSet2 1st print!");
// 模拟同步步骤2
console.info("taskpool: this is syncSet2 2nd print!");
return ++num;
}
}
业务使用TaskPool调用相关同步方法的代码。
// Index.e