任务额外耗时问题
dingdangmao123 opened this issue · 6 comments
我发现执行一个Task的时候,整个执行流程会比Task本身多花费几十到100多ms, 这对于总共也就耗时不到1s的若干Task,速度提升不明显,请问是什么原因导致,能避免吗?
@dingdangmao123 整个过程有日志记录每个task等待,执行,结束的时间,贴下log。另外,另外,怎么有效构建完全看业务怎么拆分,库只是一种工具的。最好能表述下你的场景。
var t1 = object: Task("t1", true) {
override fun run(name: String) {
Thread.sleep(500)
Log.i("Tag",name+" "+ (System.currentTimeMillis()-start))
}
}
val map = mapOf<String, Task>("t1" to t1)
val project = Project.Builder("App", Project.TaskFactory(object : TaskCreator {
override fun createTask(taskName: String): Task {
return map[taskName] ?: error("")
}
})).add("t1").build()
AnchorsManager.getInstance()
.debuggable(true)
.addAnchor("t1")
.start(project)
2021-05-07 15:54:08.644 24397-24424/com.example.myapplication I/Tag: t1 563
2021-05-07 15:54:08.676 24397-24397/com.example.myapplication I/Tag: app end 595
2021-05-07 15:54:08.820 24397-24430/com.example.myapplication I/Tag: MainActivity
只添加了一个任务
贴一下库内部的log,过滤tag就可以拿到,有完整的信息。另外,单个task不需要用project。
2021-05-07 15:54:08.093 24397-24397/com.example.myapplication D/Anchors: App_start(1620374048088) -- onStart --
2021-05-07 15:54:08.107 24397-24397/com.example.myapplication D/Anchors: App_start(1620374048088) -- onRunning --
2021-05-07 15:54:08.107 24397-24397/com.example.myapplication D/Anchors: App_start(1620374048088) -- onFinish --
2021-05-07 15:54:08.115 24397-24397/com.example.myapplication D/Anchors: t1 -- onStart --
2021-05-07 15:54:08.116 24397-24424/com.example.myapplication D/Anchors: t1 -- onRunning --
2021-05-07 15:54:08.117 24397-24397/com.example.myapplication D/Anchors: App_start(1620374048088) -- onRelease --
2021-05-07 15:54:08.645 24397-24424/com.example.myapplication D/Anchors: t1 -- onFinish --
2021-05-07 15:54:08.651 24397-24424/com.example.myapplication D/TASK_DETAIL: TASK_DETAIL
======================= task (t1 ) =======================
| 依赖任务 : App_start(1620374048088)
| 是否是锚点任务 : true
| 线程信息 : Anchors Thread #1
| 开始时刻 : 1620374048115 ms
| 等待运行耗时 : 1 ms
| 运行任务耗时 : 528 ms
| 结束时刻 : 1620374048644
==============================================
2021-05-07 15:54:08.651 24397-24424/com.example.myapplication D/ANCHOR_DETAIL: TASK_DETAIL
======================= task (t1 ) =======================
| 依赖任务 : App_start(1620374048088)
| 是否是锚点任务 : true
| 线程信息 : Anchors Thread #1
| 开始时刻 : 1620374048115 ms
| 等待运行耗时 : 1 ms
| 运行任务耗时 : 528 ms
| 结束时刻 : 1620374048644
==============================================
2021-05-07 15:54:08.651 24397-24424/com.example.myapplication D/Anchors: App_end(1620374048088) -- onStart --
2021-05-07 15:54:08.651 24397-24424/com.example.myapplication D/Anchors: t1 -- onRelease --
2021-05-07 15:54:09.023 24397-24397/com.example.myapplication D/Anchors: App_end(1620374048088) -- onRunning --
2021-05-07 15:54:09.024 24397-24397/com.example.myapplication D/Anchors: App_end(1620374048088) -- onFinish --
2021-05-07 15:54:09.027 24397-24397/com.example.myapplication D/Anchors: App_end(1620374048088) -- onRelease --
另外想请教一个问题 如果Task之间耗时差别比较大 如何构建 整体比较省时 @YummyLau
528ms是正常的,sleep到唤醒到打点。其实要先整理好项目的task哪些是必须阻塞同步完成,哪些可以延后主线程同步,哪些可以异步,然后再排好序执行就行了。框架内部用的是线程调度,不会过多损耗,有的都是系统的线程调度切换。具体来说还是看项目需求。另外,anchor是会同步阻塞调用的,你的demo在异步sleep之后才完成且主线程要同步等待,这些都是系统损耗。