yuk1ty / learning-systems-programming-in-rust

「Rustでもわかるシステムプログラミング」
433 stars 23 forks source link

goroutine の箇所には tokio を使うかどうか決めたい #40

Closed yuk1ty closed 3 years ago

yuk1ty commented 3 years ago

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 の置き換えにはベストなのではないかと考えている。

higumachan commented 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を使って自分で実装?

という感じかなと思ってます。

yuk1ty commented 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を使って自分で実装?

という感じかなと思ってます。

context.With はこれから見てみます。

yuk1ty commented 3 years ago

見た感じ、tokio::sync あたりを使うと context に近い実装ができそうですね。ちょっと PoC の状況次第ではあるんですが、goroutine の代替としてはおおよそ tokio を使用するでよさそうに思います!

とくに反対意見などなければ、tokio を使用する方向で決定したいと思います。

higumachan commented 3 years ago

@yuk1ty tokioを利用した書き換えのPoCに関しては自分の納得できる形で書けましたので #35 を見ていただけるとと思います!(Draftはmergeされたくないものにはつけてるんですが、完全なWIPと見分けがつかないので運用方法考えたいですね)

laysakura commented 3 years ago

(Draftはmergeされたくないものにはつけてるんですが、完全なWIPと見分けがつかないので運用方法考えたいですね)

自分の見てきた数社だと、Draftは「まだレビューしてほしくない(けど作業状況の共有などのためにPRにはしている)」ものにつけてました。 マージタイミングもAuthor自身がコントロールする環境ばかりだったので、マージされたくなさを表明する強い必要性はありませんでした(もちろん共有のためにdescriptionに書いたりはしますが)。

このリポジトリもマージタイミングは @yuk1ty が決定するので、レビューreadyになったらDraftは外して良いと思います。

higumachan commented 3 years ago

それでは当該のPRはOpenにさせて頂きますね。

yuk1ty commented 3 years ago

コメント遅くなりました、

(Draftはmergeされたくないものにはつけてるんですが、完全なWIPと見分けがつかないので運用方法考えたいですね)

今回のケースが特殊だと思うので、マージされてくないものでも、WIP でも気にせず Draft にしていただいていいですよ。

マージされたくない場合は、私は職場だと [DO NOT MERGE] とかタイトルに書いてるような気がします。これで(私には)意図は伝わるので、よかったらご利用ください🙂

yuk1ty commented 3 years ago

4-2 の様子を見ると、ほぼほぼ tokio で問題なさそうですね。tokio を使うで方針を固めたいと思います。

laysakura commented 3 years ago

今更ですが、いくつか自分で書いたりレビューさせていただいた感触で、

image

の内容で違和感ないです。ContextWithは #35 や後続のPRで実装されていくものと把握しています。