LoginSignup
0
0

More than 5 years have passed since last update.

FizzBuzz毎回書くのめんどくさいのでGoパッケージにした

Posted at

はじめに

めんどくさいですよね。Goパッケージ化しました。
面接試験などでFizzBuzz課題が出た時などに使ってみてください。

リポジトリ

使い方はREADME参照ください

同期/非同期モード

常々、FizzBuzzって非同期にしたらええんじゃないの?と思ってたので非同期のメソッドも作りました。

こんな感じで呼び出します。

fizzbuzz.DoAsync(100, 10)

処理はこちらです。
https://github.com/junpayment/fizzbuzz/blob/master/fizzbuzz.go#L38

数字をFizzBuzz化して、結果を別goroutineに渡してソートしているんですね。

ベンチマークはこちらです。

goos: darwin
goarch: amd64
pkg: fizzbuzz
BenchmarkDo/num_10000/do_sync-8         2000        707744 ns/op
BenchmarkDo/num_10000/do_async/goroutine_1-8                 200       8040204 ns/op
BenchmarkDo/num_10000/do_async/goroutine_5-8                 200       6065541 ns/op
BenchmarkDo/num_10000/do_async/goroutine_10-8                200       5985554 ns/op
BenchmarkDo/num_10000/do_async/goroutine_20-8                300       5787948 ns/op
BenchmarkDo/num_10000/do_async/goroutine_100-8               300       5782902 ns/op
BenchmarkDo/num_10000/do_async/goroutine_1000-8              200       6126495 ns/op

はい、非同期の方がスコア悪いですね。

FizzBuzzの処理は入力待ちとか応答待ちとか皆無なので、並列化した際のチャネルスイッチのコストの方がぜんぜん高いということだと思います。

おそらく、こちらの関数にtime.Sleep(10 * time.Millisecond)など入れるとスコアが逆転すると思います。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0