Closed yuk1ty closed 3 years ago
goroutineのことに関してはほとんど詳しくないですが。
本書3章, 13章を読んだ感じだと、今の所の書き換えは下記の感じが良いかなと思いました。 | go | rust |
---|---|---|
go func() {} |
tokio::spawn(async {}) |
|
chan T |
(tokio::sync::mpsc::Receiver<T>, tokio::sync::mpsc::Sender<T>) |
|
ch <- value |
tx.send(value) |
|
value <- ch |
rx.recv() |
|
context.With* | tokio::sync::oneshotを使って自分で実装? |
という感じかなと思ってます。
goroutineのことに関してはほとんど詳しくないですが。
本書3章, 13章を読んだ感じだと、今の所の書き換えは下記の感じが良いかなと思いました。 go rust
go func() {}
tokio::spawn(async {})
chan T
(tokio::sync::mpsc::Receiver<T>, tokio::sync::mpsc::Sender<T>)
ch <- value
tx.send(value)
value <- ch
rx.recv()
context.With* tokio::sync::oneshotを使って自分で実装?という感じかなと思ってます。
context.With はこれから見てみます。
見た感じ、tokio::sync
あたりを使うと context
に近い実装ができそうですね。ちょっと PoC の状況次第ではあるんですが、goroutine の代替としてはおおよそ tokio を使用するでよさそうに思います!
とくに反対意見などなければ、tokio を使用する方向で決定したいと思います。
@yuk1ty tokioを利用した書き換えのPoCに関しては自分の納得できる形で書けましたので #35 を見ていただけるとと思います!(Draftはmergeされたくないものにはつけてるんですが、完全なWIPと見分けがつかないので運用方法考えたいですね)
(Draftはmergeされたくないものにはつけてるんですが、完全なWIPと見分けがつかないので運用方法考えたいですね)
自分の見てきた数社だと、Draftは「まだレビューしてほしくない(けど作業状況の共有などのためにPRにはしている)」ものにつけてました。 マージタイミングもAuthor自身がコントロールする環境ばかりだったので、マージされたくなさを表明する強い必要性はありませんでした(もちろん共有のためにdescriptionに書いたりはしますが)。
このリポジトリもマージタイミングは @yuk1ty が決定するので、レビューreadyになったらDraftは外して良いと思います。
それでは当該のPRはOpenにさせて頂きますね。
コメント遅くなりました、
(Draftはmergeされたくないものにはつけてるんですが、完全なWIPと見分けがつかないので運用方法考えたいですね)
今回のケースが特殊だと思うので、マージされてくないものでも、WIP でも気にせず Draft にしていただいていいですよ。
マージされたくない場合は、私は職場だと [DO NOT MERGE]
とかタイトルに書いてるような気がします。これで(私には)意図は伝わるので、よかったらご利用ください🙂
4-2 の様子を見ると、ほぼほぼ tokio で問題なさそうですね。tokio を使うで方針を固めたいと思います。
今更ですが、いくつか自分で書いたりレビューさせていただいた感触で、
の内容で違和感ないです。ContextWithは #35 や後続のPRで実装されていくものと把握しています。
goroutine の特徴は下記にまとめられる:
Rust の場合は tokio::task が goroutine と同様に軽量スレッドを扱える。かつ、tokio も M:N モデルでワークスティーリングを採用している。Rustの非同期プログラミングをマスターする
tokio::task https://docs.rs/tokio/1.5.0/tokio/task/index.html
したがって、tokio::task をランタイムとして、基本的には tokio の機能を使っていくのが goroutine の置き換えにはベストなのではないかと考えている。