Avatar
omochimetaru 2/12/2021 2:35 AM
Custom Executor Pitch と Structured Concurrency Pitch を読み直してるけど、だんだんわかってきた
2:38 AM
async関数がsuspension pointによって区切られた個別の同期処理にPartial Taskとして分解されていて
2:39 AM
これはUnownedJobRefとしてopaqueに表現されて
2:39 AM
Executorはenqueueメソッドでそれを受け取る。 Executorが実行するときにはjob.executeを呼ぶ。 ここがダブルディスパッチなのは、Executorがスケジューリングやスレッドホッピングなどをするため。
2:41 AM
という理解であってるんかな。 SerialExecutorのgiveUpThreadとかはまだよくわかっていないけど
2:42 AM
ActorがExecutorにタスクを投入する前に
2:43 AM
tryClaimThreadして成功したら直接実行してgiveUpThreadで戻す てことなんかなあ。
2:43 AM
スレの会話によるとDispatchQueueがasyncメソッドでもスレッドスイッチしないでmutexですませるキューカウント0のときの話と似た話をしていた
2:46 AM
なんでTaskGroup.add自体がasyncなんだ。