-
tokioにはsingle thread schedulerとmulti thread schedulerがある
- single thread scheduler
-
中にSchedulerPrivというものが入っていて、これが実質的なスケジューリングをしているっぽい。
-
MpscQueueで管理(Multi-Provider-Single-Consumer-Queue)
-
parkとunparkってなんなんだ〜〜〜
- tokio_executor曰く,現在のスレッドのブロッキングやアンプロッキングの抽象化らしい。
- blocked parkはunparkによってunblockされるらしい。すなわちparkするとThreadはsleepする。
- Tokio Reactorはmio::Pollを呼んでいるらしい。
- blocked parkはunparkによってunblockされるらしい。すなわちparkするとThreadはsleepする。
- ParkerとUnParkerが存在し、それぞれArcという定義になっている。
- InnerにはMutexやShared,CondVarなどが入っている。
- SharedはsharedDriverやhandleが入っている。handleはunparkするためにあるらしい。
- InnerにはMutexやShared,CondVarなどが入っている。
- util内部で定義されているTryLockを使っている。
- tokio_executor曰く,現在のスレッドのブロッキングやアンプロッキングの抽象化らしい。
-
起動
- newでparkをunparkしている(これなんぞ?)(スレッド間の同期に関する処理?)
- ParkerとUnParkerが存在し、それぞれArcという定義になっている。
- InnerにはMutexやShared,CondVarなどが入っている。
- SharedはsharedDriver(?)やhandleが入っている(これ何するためのものだ?)
- InnerにはMutexやShared,CondVarなどが入っている。
- unparkしたものをBasicSchedulerに詰めて返している。
- LocalStateにparkを,schedulerにunparkを入れている。
- tickってなんぞ?
- この動作の意味は?
- queueの初期化もここ
- LocalStateにparkを,schedulerにunparkを入れている。
- ParkerとUnParkerが存在し、それぞれArcという定義になっている。
- spawnでtask::joinHandleを生成(生成時taskとhandleが返ってくる),scheduler.scheduleにtaskを渡してからhandleを返している。
- joinHandleの役割とは?
- block_onでFutureを受け取り、pollする。
- thread_local変数のACTIVEって何しているんだろう。
- wakerのdata部分にschedulerを突っ込んでraw_wakerを生成、contextに突っ込んでpoll。
- 実行後にtickする(これなんだろう)
- localのtickをwrapping_add(1)している(桁あふれすると0に戻る?タスク増えても死なないように?)
- queueからnext_taskでtaskを確認。
- next_taskでは、remote_queueかlocal_queueからtaskを取得している(remote_queueってなんだ?)
- 基本的にlocal_queueを確認するようになっているが、定期的にremote_queueも見るようになっている。
- next_taskでは、remote_queueかlocal_queueからtaskを取得している(remote_queueってなんだ?)
- taskを取得後、taskがあるか確認。あればtask変数に詰める。なければlocalのparkにpark()を適用。
- 取得したtaskをrunする。runした後、戻り値のtaskが存在すればを再びqueueに詰める。
- 終了したtaskはNoneを返す?
- queueからnext_taskでtaskを確認。
- tickはremote_taskを定期的に確認しにいくためのカウンタとして機能している。
- これをMAX_TASK_PER_TICK(61)回繰り返す。
- その後でlocal.parkを実行。
- localのtickをwrapping_add(1)している(桁あふれすると0に戻る?タスク増えても死なないように?)
- その後pending taskを粛清?
- newでparkをunparkしている(これなんぞ?)(スレッド間の同期に関する処理?)
-
- single thread scheduler
Last active
December 9, 2019 04:38
-
-
Save tawashichan/d59e7338da06a11d2bf20636f2e77e46 to your computer and use it in GitHub Desktop.
tokio_memo
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment