ArkTS的SendableClass对象内存共享的原理和限制是什么?
ArkTS的SendableClass对象内存共享的原理和限制是什么?
        HarmonyOS
      
        赞
        
 收藏 0
 回答 2
 
        待解决
        
相关问题
 ArkTS的SendableClass对象内存共享的原理和限制是什么 
3444浏览  • 1回复 待解决
通过PixelMap_CreatePixelMap创建的对象,内存在ArkTS侧和Native侧是否共享 
3358浏览  • 1回复 待解决
OceanBase 复制表的原理是什么? 
5335浏览  • 1回复 待解决
LazyForEach懒加载的原理是什么 
3869浏览  • 1回复 待解决
PolarDB 的备份恢复原理是什么? 
4226浏览  • 1回复 待解决
性能优化中的组件复用原理是什么 
3464浏览  • 1回复 待解决
MongoDB 库名和命名空间的限制是什么? 
4566浏览  • 1回复 待解决
OceanBase 多租户原理是什么? 
5705浏览  • 1回复 待解决
HarmonyOS 继承自sendableclass的对象支持taskpool参数传递吗 
973浏览  • 1回复 待解决
arkts和ts的区别是什么 
231浏览  • 1回复 待解决
HarmonyOS 内存模型是什么样的? 
1614浏览  • 1回复 待解决
#鸿蒙学习大百科#组件复用的原理是什么? 
1889浏览  • 1回复 待解决
#鸿蒙学习大百科#HiTraceMeter的工作原理是什么? 
1482浏览  • 1回复 待解决
HarmonyOS 系统的内存回收机制是什么样的?发现回收不及时,容易导致瞬间内存超过限制崩溃 
1322浏览  • 1回复 待解决
方舟引擎的技术原理是什么,如何平衡性能与功耗? 
793浏览  • 0回复 待解决
ArkTS是否支持类似Java的共享内存模型用于多线程开发? 
2066浏览  • 2回复 待解决
ArkTS是否支持类似Java的共享内存模型进行多线程开发 
3208浏览  • 1回复 待解决
ArkTS的对象数据与Native的对象数据如何绑定,相互持有对象数据时内存如何管理 
3114浏览  • 1回复 待解决
HarmonyOS HDC大会上的弱网无白屏,是什么技术原理 
1263浏览  • 1回复 待解决
HarmonyOS 如何确定内存中创建的ArkTS对象已被释放了 
885浏览  • 1回复 待解决
#鸿蒙学习大百科#taskpool的负载均衡机制的原理是什么? 
1419浏览  • 1回复 待解决
postgresql copy的执行原理是什么?greenplum上执行copy的过程是怎样的? 
5000浏览  • 1回复 待解决
HarmonyOS  worker线程和主线程支持内存共享 
1685浏览  • 1回复 待解决
请问一下,ArkTs的页面布局style的底层实现是什么样的?有没有相关帖子介绍原理? 
3595浏览  • 1回复 待解决
#鸿蒙学习大百科#实现分帧渲染的原理是什么? 
1326浏览  • 1回复 待解决





















SendableClass是基于ArkTS的Actor内存隔离并发模型扩展而来的。Sendable对象的内存在线程之间是共享的,但需要保证单线程下无锁运行。因此,确保同一个Sendable实例不会被多个线程并发访问,开发者需要使用同步机制确保线程安全。
Sendable对象需要满足以下规格要求:
成员属性必须是Sendable类或基础类型(如string、number、boolean等)。
成员属性必须显式初始化。
成员函数不能使用闭包,只能使用入参、this成员或import导入的变量。
只能让Sendable类继承Sendable类。
@Sendable注解只能在ArkTS(ets)文件中使用。
不支持定义私有属性,需使用private关键字。
导出Sendable类的文件中不能导出非Sendable属性。
Sendable对象可以通过以下两种方式进行传输:
序列化传递:将对象进行深拷贝到其他线程,不共享模式。
共享模式:允许在多个线程之间进行引用传递,多线程可以同时读写,但开发者需要自行使用同步机制避免多线程竞争。
一、内存共享的原理
SendableClass对象通过引用计数来管理内存。每当一个新的引用被创建时,引用计数增加;当一个引用被销毁时,引用计数减少。当引用计数降为零时,内存会被释放。SendableClass实现了线程安全的内存共享机制。这意味着多个线程可以安全地访问同一个SendableClass对象,而不必担心数据竞争或内存损坏。SendableClass可以通过底层的IPC(进程间通信)机制来共享内存。通常,这种共享是通过共享内存区或消息传递机制来实现的。二、限制
SendableClass提供了便利的内存共享方式,但频繁地跨线程或跨进程访问共享内存会带来性能开销。特别是在高并发环境下,可能会导致锁竞争,从而影响性能。SendableClass本身是线程安全的,但开发者仍需注意在并发操作时的数据一致性问题。SendableClass进行内存共享会增加代码的复杂性。开发者需要了解底层的共享机制,正确处理同步和引用计数,才能避免潜在的问题。