当前位置: 首页 > news >正文

【HarmonyOS Next】鸿蒙TaskPool和Worker详解 (一)

【HarmonyOS Next】鸿蒙TaskPool和Worker详解 (一)

一、TaskPool和Worker如何实现多线程?各自特点是什么?

在鸿蒙中通过TaskPool和Worker实现多线程并发,两者都基于Actor并发模型实现。
在这里插入图片描述
Actor并发模型,每一个独立的Actor代表一个线程。互相之间不打扰,内存不共享,通过消息进行传递,线程间进行通信传输。

比内存共享并发模型好在不会同时竞争同一内存资源。

【内存共享并发模型指多线程同时执行任务,这些线程依赖同一内存并且都有权限访问,线程访问内存前需要抢占并锁定内存的使用权,没有抢占到内存的线程需要等待其他线程释放使用权再执行。】

两者都是为了处理耗时或者密集型的任务。用多线程的方式,规避堵塞主线程的问题。从而最大化系统的利用率,降低整体资源消耗,并提高系统的整体性能。

生命周期
TaskPool自行管理生命周期,无需关心任务负载高低。而Worker需要自行管理Worker的数量及生命周期。

个数上限
现在Worker同个进程下,最多支持同时开启64个Worker线程,实际数量由进程内存决定。而TaskPool线程池的概念,理论上没有上限。

任务处理量级
TaskPool主要处理轻量级,所以有三分钟的任务处理时间限制。worker主要处理时间更长,偏重。

二、TaskPool的使用

  1. 首先定义处理函数:
import { taskpool } from '@kit.ArkTS';


async function concurrentTest(context: common.UIAbilityContext): Promise<boolean> {
// 处理耗时任务
  return true;
}
  1. 通过调用execute()方法执行任务
  
            taskpool.execute(concurrentTest, context).then(() => {
              // 调度结果处理
          
            })

三、worker的使用

1.首先需要创建worker文件:
在这里插入图片描述
在其中进行消息收发和耗时逻辑处理。

2.之后进行worker实例的获取:

// Index.ets
import { worker } from '@kit.ArkTS';

const workerInstance: worker.ThreadWorker = new worker.ThreadWorker('entry/ets/workers/MyWorker.ts');

3.进行消息监听和发送:

// Index.ets
let done = false;

// 接收Worker子线程的结果
workerInstance.onmessage = (() => {
  console.info('MyWorker.ts onmessage');
  if (!done) {
    workerInstance.postMessage({ 'type': 1, 'value': 0 });
    done = true;
  }
})

workerInstance.onerror = (() => {
  // 接收Worker子线程的错误信息
})

// 向Worker子线程发送训练消息
workerInstance.postMessage({ 'type': 0 });

相关文章:

  • HAProxy的ACL
  • linux vim 撤销 回退操作
  • 【第十节】C++设计模式(结构型模式)-Flyweight( 享元)模式
  • mysql --- 相关基础知识整理
  • 【Linux】TCP 全连接队列与 tcpdump 抓包
  • iOS开发之GCD信号量dispatch_semaphore_t源码分析和使用
  • JavaScript 系列之:垃圾回收机制
  • zotero:如何快捷使用硅基流动(siliconflow)的deepseek?
  • 27.贪心算法5
  • DeepSeek开源周,第四弹再次来袭,优化并行策略
  • cesium 解决加载带动画的glb不播放动画问题
  • 记录MFC联合halcon界面显示开发
  • 查询NFT图片地址
  • 42 session反序列化漏洞
  • JavaWeb25.02.27
  • 【前端】XML,XPATH,与HTML的关系
  • 推荐算法工程师的技术图谱和学习路径
  • 实验环境搭建集锦(docker linux ros2+强化学习环境+linux上单片机串口调试)
  • Kylin麒麟操作系统服务部署 | Nginx服务部署
  • BRD4缺失通过GRP78灭活内质网应激,延缓脱氢表雄酮诱导的卵巢颗粒细胞凋亡
  • 免费申请账号网站/百度贴吧怎么发广告
  • 网站建设公司douyanet/石家庄seo外包公司
  • wordpress 音乐插件/seo搜索引擎优化就业指导
  • 品网站建设公司/直通车关键词优化
  • 网站建站分为两种/新乡seo优化
  • 公司起名字大全免费四个字/上海seo优化服务公司