28 ポイント 投稿者 xguru 2022-11-28 | 14件のコメント | WhatsAppで共有
  • 面接でよく聞かれる質問が2つある
    • テキストファイル内の単語数を数えるプログラムを書いてください
    • このプログラムの性能上のボトルネックはどの部分ですか?
  • よく「ファイルから読むこと」という答えが出るが、もはやそうではない
  • 10~20年前はそうだったが、2022年現在ではディスクからシーケンシャルに読むのは非常に高速(筆者も自分でテストするまでは知らなかった)
  • ボトルネックになるのは、入力を処理・パースしてメモリに割り当てる部分:単語に分割し、小文字に変換し、ハッシュテーブルで頻度を数えるといった処理
  • Python/Goで413MBのテキストファイル(キング・ジェームズ聖書を100回連結したファイル)をテストしてみると
    • 読み込みは0.1~0.2秒で済み、処理には7秒から2秒までかかる
  • 結論として、「ビッグデータ」を処理する場合、ディスクI/Oはボトルネックではない可能性がある

14件のコメント

 
is9117 2022-12-01

どれだけシーケンシャルアクセスであっても、言語ごと、ライブラリごとにIOパイプの使い方や開発者のIO APIリクエスト頻度など影響する部分があるため、IOはもはやボトルネックではないと言うには前提が必要だと思う

 
yuriwin 2022-11-30

ネットワークI/OはI/Oじゃないのか?www

 
yuriwin 2022-11-30

どれだけ高速化しても、I/OはI/Oだ。だからこそ、プログラミングではI/O部分のためだけのソリューションが別個に存在する理由だ。

 
love7peace 2022-11-29

ビッグデータ用ディスクを全部 NVMe SSD にするって?(笑) いったいいくらするんだ……

 
loblue 2022-11-28

ディスクI/Oで非常に苦しみながら、プラッタをできるだけ動かさないようにしなければならない仕事をしている私としては、不思議な話ですね。
本文には「シーケンシャル」という話が出ていますね。
seekをまったくしないのであれば、あながち間違った話ではないのかもしれません。

 
deokim 2022-11-28

前提が誤った実験です。

 
roxie 2022-11-29

もう少し詳しい説明をお願いします

 
deokim 2022-12-05

ボトルネックというもの自体が、相対的な時間についての話です。
CPUの速度とI/Oを比較するのが適切です。
過去のI/Oより速くなったからといって、I/OがCPUより速くなることはありません。

 
deokim 2022-12-05

mmap を使って仮想メモリにロードだけしておき、実際には CPU が演算するたびに読み込むこともありえます。
CPU とすべてのメモリ(レジスタ、メインメモリ、ディスク)間の通信も、すべて I/O です。
https://stackoverflow.com/questions/5877797/how-does-mmap-work

 
park2348190 2022-11-28

ビッグデータを見極める基準が気になりますね

 
nicewook 2022-11-28

興味深いです。

 
jungmin1237 2022-11-28

今日もまた一つ知識が増えました。

 
xguru 2022-11-28

https://news.ycombinator.com/item?id=33751266 にある最初のコメントのURLが面白いですね。
Napkin Math(ちょっとした数学)
シーケンシャルI/Oはほぼメモリ速度に近づいているとか..

 
nicewook 2022-11-28

「ナプキン・マス」という名前、あまりにも魅力的ですね。
UTF-8 を作るとき、ロブ・パイクがナプキンに走り書きして見せたとか。