DSAppTeam / Anchors

:white_check_mark: Anchors 是一个基于图结构,支持同异步依赖任务初始化 Android 启动框架。其锚点提供 "勾住" 依赖的功能,能灵活解决初始化过程中复杂的同步问题。参考 alpha 并改进其部分细节, 更贴合 Android 启动的场景, 同时支持优化依赖初始化流程, 自动选择较优的路径进行初始化。
Apache License 2.0
820 stars 79 forks source link

Sleep 可以改成信号量,防止部分无意义唤醒造成的线程调度开销 #35

Closed JarvisGG closed 2 years ago

YummyLau commented 2 years ago

信号量阻塞可能导致无响应,由于是前台进程,所以动态参与竞争可以解决无响应,损耗其实可以忽略不计。

JarvisGG commented 2 years ago

sleep + 死循环还是会无响应啊(而且 10ms 是怎么定出来的,我这边看 trace 很频繁)。不理解是怎么解决的。求教。

yuzhiqiang1993 commented 2 years ago

我也没太理解为啥要sleep 10 ms,常规做法不都是countdownLatch之类的吗,请大佬指点

yuzhiqiang1993 commented 2 years ago

我在抓取trace文件的时候发现两处主线程休眠10ms的地方(什么事都没干,也没有需要等待执行完成的依赖任务,就是干等)。应该就跟此处的sleep 10ms有关,如果锚点较多,空等10ms的次数可能就会增加,有较大几率拉长启动时间。这个地方改成countdownLatch之类的方案应该能避免出现空等10ms的情况。

JarvisGG commented 2 years ago

目前我改成信号量了,wait notify。准备上线看看

YummyLau commented 2 years ago

@yuzhiqiang1993 @JarvisGG 大家反馈的问题,已经在测试了。最近会有反馈同步。

EdminhPeng commented 2 years ago

@yuzhiqiang1993 @JarvisGG 大家反馈的问题,已经在测试了。最近会有反馈同步。

@YummyLau 大佬,这个优化目前是什么进度呢?什么时候更新版本?

LinYYY commented 2 years ago

v1.1.5已调整