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

网站建设客户分析建工网校题库

网站建设客户分析,建工网校题库,五莲网站设计,自贸区注册公司有什么优势本文讨论了如何将多线程的 Java 代码转换为 OpenHarmony ArkTS 代码​ 一、简介 Java 内存共享模型 以下示例伪代码和示意图展示了如何使用内存共享模型解决生产者消费者问题。 生产者消费者与共享内存间交互示意图 为了避免不同生产者或消费者同时访问一块共享内存的容器时…本文讨论了如何将多线程的 Java 代码转换为 OpenHarmony ArkTS 代码​ 一、简介 Java 内存共享模型 以下示例伪代码和示意图展示了如何使用内存共享模型解决生产者消费者问题。 生产者消费者与共享内存间交互示意图 为了避免不同生产者或消费者同时访问一块共享内存的容器时产生的脏读脏写现象同一时间只能有一个生产者或消费者访问该容器也就是不同生产者和消费者争夺使用容器的锁。当一个角色获取锁之后其他角色需要等待该角色释放锁之后才能重新尝试获取锁以访问该容器。 // 此段示例为伪代码仅作为逻辑示意便于开发者理解使用内存共享模型和Actor模型的区别 BufferQueue {Queue queueMutex mutexadd(value) {// 尝试获取锁if (mutex.lock()) {queue.push(value)mutex.unlock()}}take() {// 尝试获取锁if (mutex.lock()) {if (queue.empty()) {return null}let res queue.pop(value)mutex.unlock()return res}} }// 构造一段全局共享的内存 let g_bufferQueue new BufferQueue()Producer {run() {let value random()// 跨线程访问bufferQueue对象g_bufferQueue.add(value)} }Consumer {run() {// 跨线程访问bufferQueue对象let res g_bufferQueue.take()if (res ! null) {// 添加消费逻辑}} }Main() {let consumer new Consumer()let producer new Producer()// 多线程执行生产任务for 0 in 10 :let thread new Thread()thread.run(producer.run())consumer.run() } ArkTS Actor 模型 以下示例简单展示了如何使用基于Actor模型的TaskPool并发能力来解决生产者消费者问题。 Actor模型线程间通信示意图 Actor模型不同角色之间并不共享内存生产者线程和UI线程都有自己独占的内存。生产者生产出结果后通过序列化通信将结果发送给UI线程UI线程消费结果后再发送新的生产任务给生产者线程。 import taskpool from ohos.taskpool; // 跨线程并发任务 Concurrent async function produce(): Promisenumber{// 添加生产相关逻辑console.log(producing...);return Math.random(); }class Consumer {public consume(value : number) {// 添加消费相关逻辑console.log(consuming value: value);} }Entry Component struct Index {State message: string Hello Worldbuild() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button() {Text(start)}.onClick(() {let produceTask: taskpool.Task new taskpool.Task(produce);let consumer: Consumer new Consumer();for (let index: number 0; index 10; index) {// 执行生产异步并发任务taskpool.execute(produceTask).then((res : number) {consumer.consume(res);}).catch((e : Error) {console.error(e.message);})}}).width(20%).height(20%)}.width(100%)}.height(100%)} }Java 开发者仍然习惯于使用基于共享内存的并发模型上手 actor 并发模型仍有一定的学习成本但是借助 OpenHarmony源码转换器Java 开发者可以无痛将代码迁移到 ArkTS减轻工作负担。 二、方案对比 Java 开发者在处理并发问题时经常会碰到三个问题可见性、原子性、有序性好在都有解决方案比如用锁来保证可见性原子指令保证原子性内存屏障保证有序性。正确使用时并发粒度高但出现问题时很难调试复现。 ArkTS 并发模型不基于共享内存因此并不会存在上述并发法问题但并发粒度比较低。 OpenHarmony 实际上提供了两种线程机制TaskPool、Worker。TaskPool 是对 Worker 的封装开发者不需要去手动管理生命周期。Worker 线程机制最多开启 8 个线程。 TaskPool运作机制 TaskPool支持开发者在主线程封装任务抛给任务队列系统选择合适的工作线程进行任务的分发及执行再将结果返回给主线程。接口直观易用支持任务的执行、取消。工作线程数量上限为4。 Worker运作机制 创建Worker的线程称为宿主线程不一定是主线程工作线程也支持创建Worker子线程Worker自身的线程称为Worker子线程或Actor线程、工作线程。每个Worker子线程与宿主线程拥有独立的实例包含基础设施、对象、代码段等。Worker子线程和宿主线程之间的通信是基于消息传递的Worker通过序列化机制与宿主线程之间相互通信完成命令及数据交互。 三、ArkTS 线程当前支持的通信方式 可序列化数据 对于可序列化的数据能够通过Structured Clone算法在线程间进行复制传输。支持的可序列化对象有限:除Symbol之外的基础类型、DateString、RegExp、Array、MapSet、Object (仅限简单对象比如通过{}或者new Object创建普通对象仅支持传递属性不支持传递其原型及方法)、TypedArray。 可转移数据 ArrayBuffer 可转移对象Transferable object传输采用地址转移进行序列化不需要内容拷贝会将ArrayBuffer的所有权转移给接收该ArrayBuffer的线程转移后该ArrayBuffer在发送它的线程中变为不可用不允许再访问 let buffer new ArrayBuffer(100) 可共享数据 SharedArrayBuffer 共享对象SharedArrayBuffer拥有固定长度可以存储任何类型的数据包括数字、字符串等。 共享对象传输指SharedArrayBuffer支持在多线程之间传递传递之后的SharedArrayBuffer对象和原始的SharedArrayBuffer对象可以指向同一块内存进而达到内存共享的目的。 SharedArrayBuffer对象存储的数据在同时被修改时需要通过原子操作保证其同步性即下个操作开始之前务必需要等到上个操作已经结束。 let ia new SharedArrayBuffer(1024): // 定义可共享对象可以使用Atomics进行操作 ia[37] 163; console.log(ia[37]); // Prints 163, the 38th prime Atomics.store(ia, 37, 123); while (Atomics.load(ia, 37) 163); console.log(ia[37]); // Prints 123四、实现难点 需要考虑到Java如下常用能力 Java线程对共享内存的竞争例如锁的使用Java线程之间的同步例如生产与消费者模型Java线程之间的协同例如线程的睡眠、唤醒。Java synchronize关键字的使用
http://www.zqtcl.cn/news/499380/

相关文章:

  • 网站被黑 禁止js跳转企业为什么要建立集团
  • 建设网站的各种问题上海品牌女装排行榜前十名
  • seo优化搜索引擎网站优化推广网络关键词优化-乐之家网络科技商城网站备案能通过吗
  • 江门网站建设推广策划网站改版的宣传词
  • 网站建设三大部分国外购物平台网页界面设计
  • 公司商城网站建设方案wordpress旗舰
  • 京东云服务器怎么做网站企业宣传网站怎么做
  • 如何自学网站建设云南网爱我国防知识竞赛
  • 什么网站可以做投资设计接单
  • 网站内容批量替换桐乡网站制作
  • 怎么免费做网站教程制作xml网站地图文件
  • 广西智能网站建设哪家好网红商城
  • 关于建设网站的情况说明书wordpress 在线检测
  • 帝国cms 网站迁移错版怎样做心理咨询网站
  • 烟台建网站wordpress重写规则
  • 上海网站建设怎么赚钱平顶山网站建设服务公司
  • 导航网站如何被百度收录广告设计在线设计
  • 雪域什么网站是做电影的苏州优化方式
  • 设计网站多少钱手机百度助手
  • 驾校网上约车网站开发不会做网站如何做seo
  • 企业做推广可以发哪些网站宜兴埠网站建设
  • 网站后台文章添加成功 不显示公司设计网站建设合同
  • 后端开发需要掌握哪些知识潍坊优化公司
  • 专业手机网站制作哪家好wordpress wp-polls
  • 网站建设前分析网页制作素材按钮
  • 做视频网站怎么对接云盘松江新城网站建设
  • 温州阿里巴巴网站建设企业宣传片怎么拍
  • 淮阳住房城乡建设局网站阿里巴巴做国际网站要多少钱
  • 电子商务个人网站可以备案吗短网址还原
  • 网站内容由什么组成部分组成部分电子商务网站建设主管的策划书