在 Azure Service Fabric 参与者中启动线程?

罗纳德·维尔登伯格

我知道 Service Fabric 中的参与者是单线程的。但是假设我在 actor 方法中启动了一个新线程,那么会发生什么?即使生成的线程仍在执行,actor 会被停用吗?

根据文档,一个actor在一段时间没有被“使用”时会被停用。在这种情况下,“使用”意味着:

  • 接听电话
  • IRemindable.ReceiveReminderAsync 被调用

所以似乎没有考虑到我启动的新线程。但也许有人可以证实这一点?

迭戈·门德斯

确切地。

当您启动一个新线程时,原始线程(演员)将继续运行并超出范围,而跨区线程将继续运行。看看会发生什么:

当一个actor收到一个调用时,处理这个调用的线程会使用一个SemaphoreSlim来获取一个锁来处理这个actor对象,如果另一个线程已经获取了这个锁,当前线程会等待它的释放,这样一旦空闲它就可以继续.

一旦获得锁,线程将执行并从调用的方法返回,并释放锁以供后续线程继续。

当你跨越一个新线程作为actor逻辑的一部分时,它只会作为服务进程的一部分运行,但这里的问题是,一旦你离开方法范围,你将不再控制这个线程,但它将继续运行,并且对于角色运行时任务已经完成,下一个角色调用将创建另一个线程,并且事情将继续进行。

问题将在以下情况下开始:

  • 您无法控制正在运行的线程数量,您的服务将开始消耗过多内存,SF 可能会尝试在实例之间平衡 actor\service,因为它不知道这些线程,如果它移动 actor 服务,所有您的线程将被中止,您将失去这些操作。
  • 来自上一个调用的跨区线程将与新线程竞争下一个 actor 调用。
  • 如果新线程使用actor数据继续其他操作,spanned线程和actor线程将面临并发问题,在没有异常发生的情况下,你将出现无法轻松调查的奇怪行为。例如,一个线程更改了另一个正在使用的值。
  • 以及您可能面临的许多其他并发问题

在您可能(认为)需要另一个线程的情况下,您可以:

  • 创建另一个actor来处理任务
  • 在队列中创建一条消息以供其他服务处理
  • 作为参与者调用的一部分执行任务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Service Fabric 参与者中的静态对象

来自分类Dev

Service Fabric 参与者、ReceiveReminderAsync 和 CancellationTokens

来自分类Dev

Azure Service Fabric中可靠的Blob状态?

来自分类Dev

在Azure Service Fabric中动态创建服务

来自分类Dev

Azure Service Fabric中的发布/订阅模式

来自分类Dev

查询Azure Service Fabric中的Actor列表

来自分类Dev

在Azure中收集Service Fabric群集日志

来自分类Dev

在Azure中收集Service Fabric群集日志

来自分类Dev

在 Azure Service Fabric 中托管 WCF 服务

来自分类Dev

Azure Service Fabric的使用

来自分类Dev

Azure Service Fabric 路由

来自分类Dev

Service Fabric是否提供API在运行时在分区之间移动参与者

来自分类Dev

在同一Service Fabric服务中使用多种参与者类型的优缺点

来自分类Dev

可以在 Service Fabric 集群节点中创建多少个参与者

来自分类Dev

Azure Service Fabric消息队列

来自分类Dev

Service Fabric Azure测试环境

来自分类Dev

Azure Service Fabric多租户

来自分类Dev

Azure Service Fabric更改IP

来自分类Dev

Azure Service Fabric提醒GetReminder

来自分类Dev

Azure Service Fabric v 单体

来自分类Dev

Azure Service Fabric中的应用程序设计

来自分类Dev

Azure Service Fabric与Project Orleans中的Actor粒度

来自分类Dev

在Azure Service Fabric中查询数据的最佳方法是什么?

来自分类Dev

无法在Azure门户中创建Service Fabric群集

来自分类Dev

在Azure Service Fabric Web Api中启用CORS

来自分类Dev

Azure Service Fabric中WCF服务的HTTP端点

来自分类Dev

在Azure Service Fabric上设置TCP

来自分类Dev

Azure Service Fabric actor提醒更新?

来自分类Dev

Azure Service Fabric群集设置问题