ArkTS的SendableClass对象内存共享的原理和限制是什么?

ArkTS的SendableClass对象内存共享的原理和限制是什么?

HarmonyOS
2024-07-16 11:22:11
浏览
收藏 0
回答 2
待解决
回答 2
按赞同
/
按时间
zxjiu

SendableClass是基于ArkTS的Actor内存隔离并发模型扩展而来的。Sendable对象的内存在线程之间是共享的,但需要保证单线程下无锁运行。因此,确保同一个Sendable实例不会被多个线程并发访问,开发者需要使用同步机制确保线程安全。

Sendable对象需要满足以下规格要求:

成员属性必须是Sendable类或基础类型(如string、number、boolean等)。

成员属性必须显式初始化。

成员函数不能使用闭包,只能使用入参、this成员或import导入的变量。

只能让Sendable类继承Sendable类。

@Sendable注解只能在ArkTS(ets)文件中使用。

不支持定义私有属性,需使用private关键字。

导出Sendable类的文件中不能导出非Sendable属性。

Sendable对象可以通过以下两种方式进行传输:

序列化传递:将对象进行深拷贝到其他线程,不共享模式。

共享模式:允许在多个线程之间进行引用传递,多线程可以同时读写,但开发者需要自行使用同步机制避免多线程竞争。

分享
微博
QQ
微信
回复
2024-07-16 19:33:10
MC7930000036C2W

一、内存共享的原理

  1. 引用计数SendableClass对象通过引用计数来管理内存。每当一个新的引用被创建时,引用计数增加;当一个引用被销毁时,引用计数减少。当引用计数降为零时,内存会被释放。​
  2. 线程安全SendableClass实现了线程安全的内存共享机制。这意味着多个线程可以安全地访问同一个SendableClass对象,而不必担心数据竞争或内存损坏。
  3. 跨进程共享:在需要跨进程通信的情况下,​​SendableClass​​可以通过底层的IPC(进程间通信)机制来共享内存。通常,这种共享是通过共享内存区或消息传递机制来实现的。

二、限制

  1. 性能开销:尽管SendableClass提供了便利的内存共享方式,但频繁地跨线程或跨进程访问共享内存会带来性能开销。特别是在高并发环境下,可能会导致锁竞争,从而影响性能。
  2. 内存泄漏风险:如果没有正确地管理引用计数,可能会导致内存泄漏。开发者需要确保在适当的时候释放引用,以避免不必要的内存占用。
  3. 一致性问题:在多线程环境中,确保数据一致性是一个挑战。尽管SendableClass本身是线程安全的,但开发者仍需注意在并发操作时的数据一致性问题。
  4. 复杂性增加:使用SendableClass进行内存共享会增加代码的复杂性。开发者需要了解底层的共享机制,正确处理同步和引用计数,才能避免潜在的问题。
分享
微博
QQ
微信
回复
2024-07-16 21:04:38
相关问题
OceanBase 复制表原理是什么
4056浏览 • 1回复 待解决
LazyForEach懒加载原理是什么
1973浏览 • 1回复 待解决
PolarDB 备份恢复原理是什么
2701浏览 • 1回复 待解决
性能优化中组件复用原理是什么
1848浏览 • 1回复 待解决
OceanBase 多租户原理是什么
4188浏览 • 1回复 待解决
Actor线程内存如何共享
280浏览 • 1回复 待解决
Worker线程内存如何共享
2118浏览 • 1回复 待解决
TaskPool线程内存如何共享
1932浏览 • 1回复 待解决