模块间信号量与执行任务挂起问题

假设

假设有几个模块
一,执行命令的S模块及其任务tS
二,业务模块V,存在两个子模块V1,V2,该模块无自己任务
三,业务模块T及其任务tT
四,业务模块VS,无任务
五,业务模块P,无任务

业务功能

对于业务模块V,由于V1,V2耦合性非常强,使用同样的操作锁semV
执行T的业务时需要调用V2的接口,会拿到V的操作锁,且执行时间较长
执行VS的某条命令会调用(或者同步通知模块P),业务P再同步或者异步通知关心该事件的模块(由关心该事件的模块来决定同步或者异步)
业务模块V中V1同步关心P的事件,V2异步关心P的事件

存在场景:

对于执行T的业务命令后,首先
1.在tS中执行命令,模块T讲动作加入任务tT中异步处理,则在该任务中调用V2的流程(约1~2mins)。
2.此时tS可以继续执行其他命令。执行业务VS的命令,则在tS中,VS同步通知P,P进行通知该事件,V1是同步关心,则先V2进行流程,但是由于semV由1.中任务tT持有,所以tS只好一直等待tT拿到的锁,直到tT将锁semV释放后才可以执行,则导致tS挂起,无法继续执行其他命令。

解决思路:

1.可见tT任务可以在后台执行,不影响tS的任务,对于VS可以自己进行一个tVS的任务,使得该任务在后台跑起,不影响tS的任务进行其他命令执行
2.优化V2,对于V2的业务可能可以进行一些优化,但是对于必须执行这么久的工作则无法继续进行,只可能对所有工作进行异步处理而非同步进行,当然要建立在保证时序的情况下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值