2020年2月16日日曜日

GolangとRustのマルチコアの非同期処理性能の研究

https://python.ms/rust-or-go/

シェアしました。
ーーー
Rustと競合? - Goへの誤解について
似てるのは例外機構を捨てたこととバイナリがポータブルなことぐらい。 得意な用途は全く異なります。...
Go は非同期処理をシンプルに書きつつマルチコア性能を引き出すのが強みです。
Rust は徹底してオーバーヘッドを排除してシングルコアの限界性能を引き出せるのが強みです。... これらの強みが関係ない分野だけが競合しています(CLIツールなど)。
ーーーGo は非同期処理が得意らしいです。 並列分散を土台に据えたブロックチェーンなどで採用されています。 対して Rust は非同期処理の導入に向けていくらか苦闘した形跡が見受けられます。
ブロックチェーンとかの分散処理系は Go が強いのかなと...
ブロックチェーン周りではかなりGolangの比率が高そうな感じなんですよね。Bitcoinも確かGolangの実装が幅を効かせていたような(違っていたらごめんなさい)気がしますし、EOSなどWASMを採用しているところでC系が嫌な人はGolangかRUSTを選ぶでしょうし。う~む、Goか。



並列処理が得意という認識の中で Go が採用されたりするらしいです。
ーーー
https://rust-jp.slack.com/archives/C8FLSR5F1/p1581817325205300
勉強の為に転載(シェア)致しました。

石塚 正浩  10:42 AM
ネットで調べて調査中なのですが、

10:42
GolangとRustでは、マルチコアの非同期処理の性能に特徴が出るらしいですが、
10:42
Golangの方が非同期処理が強く。 (edited)
10:43
Rustはシングルコアでの性能が高いらしいですが、本当の所、何かわかる方がいらっしゃいましたら、ご教授頂ければ幸いです。
10:44
https://python.ms/rust-or-go/
シェアしました。
ーーー
Rustと競合? - Goへの誤解について
似てるのは例外機構を捨てたこととバイナリがポータブルなことぐらい。 得意な用途は全く異なります。...
Go は非同期処理をシンプルに書きつつマルチコア性能を引き出すのが強みです。
Rust は徹底してオーバーヘッドを排除してシングルコアの限界性能を引き出せるのが強みです。... これらの強みが関係ない分野だけが競合しています(CLIツールなど)。
ーーーGo は非同期処理が得意らしいです。 並列分散を土台に据えたブロックチェーンなどで採用されています。 対して Rust は非同期処理の導入に向けていくらか苦闘した形跡が見受けられます。
ブロックチェーンとかの分散処理系は Go が強いのかなと...
𝗢‌ 𝗝‌ 𝗞
@ojklab

ブロックチェーン周りではかなりGolangの比率が高そうな感じなんですよね。Bitcoinも確かGolangの実装が幅を効かせていたような(違っていたらごめんなさい)気がしますし、EOSなどWASMを採用しているところでC系が嫌な人はGolangかRUSTを選ぶでしょうし。う~む、Goか。
1
4:15 PM - Jan 15, 2019
Twitter Ads info and privacy
See 𝗢‌ 𝗝‌ 𝗞's other Tweets
並列処理が得意という認識の中で Go が採用されたりするらしいです。

python.mspython.ms
Rust なのか Go なのか | 民主主義に乾杯
Go は goroutine です。Rust は所有権です。Go は並列処理が得意です。Rust は並列処理は得意ではありませんが、Go よりも高速に動作します。

てんちゃん  10:51 AM
Rustの並列処理はまだこなれてないかもしれませんが、そもそも速度が2-5倍Goより速いので、並列処理をRustで書いたらGoより遅くなるわけではありません
10:52
ごりごりチューンナップしたスマートにな処理をかけるメンバーがいるならRustを、派遣で人海戦術するならGoを選ぶのが良いのではないかと思います

q  10:56 AM
r  11:01
q  11:04 AM

t  11:15 AM
GolangとRustでは、マルチコアの非同期処理の性能に特徴が出るらしいですが、
Golangの方が非同期処理が強く。
ここでいう「強い」は「非同期処理を書きやすい」の意味合いが強いと思います。性能が高いわけではありません。
Goはgoroutineという、言語のランタイムで実現された軽量なスレッドを持ち、(重量級の)OSスレッドを用いたときと同じような記述で、マルチコアを活かしたスケーラブルなプログラムを書けます。
Rustを含む他の多くの言語は軽量スレッドは持たずに、ライブラリを通した非同期処理とOSスレッドを組み合わせます。そのため、OSスレッドのみで記述したときよりも、コードが複雑になる傾向があります。
なおRustの場合はCPUコアあたりの処理能力が高いので、非同期処理を用いずにOSスレッドだけを使用しても、マルチコアを十分活かしたプログラムが書けます。 (edited)
:eyes:
1

11:19
Rustはシングルコアでの性能が高いらしいですが、
Rustはシングルコア、マルチコアに関係なく性能は高いです。Rustではコードを通してシステム資源をきめ細やかに制御できますので、効率と性能を極限まで追求できます。
非同期処理については、昨年11月にリリースされたRust 1.39で、ユーザーが長年待ち望んでいた async/.await 構文が導入されました。これにより直感的に記述できるようになりました。
https://tech-blog.optim.co.jp/entry/2019/11/08/163000 (edited)
:naruhodo:
2

t  8:15 PM
あと、こちらの海外のRustユーザーフォーラムでの回答も紹介してもらえるといいかもしれません。(URLだけの紹介でもいいです)  https://users.rust-lang.org/t/what-made-you-choose-rust-over-go/37828 (edited)
The Rust Programming Language Forum
What made you choose Rust over Go?
I am really torn between Rust and Go. Both have redeeming features, but one of the things that really makes me think I should stick with Rust is Rust's consistent position as developers' most favorite programming language, according to the StackOverflow Developer Survey over the past few years. So, pardon me in advance for a really generic and opinionated question, but what is it that you like about Rust? What, in particular, made you or your organizations choose it over Go?
Reading time
5 mins :clock2:
Likes
82 :heart:
Feb 5th

t  8:40 PM
もう一点、上で https://python.ms/rust-or-go/ から引用されている部分ですが、
Go は非同期処理が得意らしいです。 並列分散を土台に据えたブロックチェーンなどで採用されています。 対して Rust は非同期処理の導入に向けていくらか苦闘した形跡が見受けられます。
ブロックチェーンとかの分散処理系は Go が強いのかなと...
これ(ブロックチェーン云々)はあまり当てはまらないのかなと思います。たとえば、Facebookが推進する仮想通貨Libraでは、実装言語にRustが選択されています。 https://developers.libra.org/docs/community/coding-guidelines
その影響なのか、他にもブロックチェーン関連でRustで実装しているグループがいくつかあるようです。

ーーー
コメント:
Slack上にて、
ご回答頂きましてありがとう御座います。
超初心者の私なりに解釈しますと、
GolangとRustのマルチコアの非同期性能について、
究極的には、性能は、ほぼ同じくらいになりますが、
ソースコードの書きやすさで言うとGoの方が書きやすいけど、
マルチスレッドのデーターの競合を防ぐ面では、Rustの方が安全でRustに軍配が上がる様です。

PHP&Python&Go&Rust  WEBプログラマー
石塚 正浩
http://aon.tokyo
cloud9slack@gmail.com
skype
live:cloud9slack

0 コメント:

コメントを投稿