アカウント名:
パスワード:
yesコマンドなんて最初は「何だこれ?」と思ったけど最近はPC起動するたびに使ってる気がする何かと手間が省けるんだよね地味イーーにものぐさができる
初期のUNIXのシンプルさ、柔軟さを今に伝える貴重なプログラム。...なのだが、GNU 版のソースとかを見るとロブ・パイクがUNIXは腐臭を放っていると発言したのも最もだと思わせる。
でも例えばprintfを改良してどうにかなる問題じゃないからな。ループで問答する時のバッファをどうするかって話なんだから、まさにアルゴリズムの優劣が結果にダイレクトに反映されてるわけだ。
アルゴリズムとは言い難い感じ。一行ずつチマチマ投げるよりも、ページ境界に合うのを期待した大きい領域に何行も詰め込んで投げる方が早いよねっていう。
> 一行ずつチマチマ投げるよりも、ページ境界に合うのを期待した大きい領域に何行も詰め込んで投げる方が早いよねっていう。
なんで後者の方が早いんですか?
境界またがったら2ページ分の操作が要るとかというか、パディング分の領域が無駄になるとか再構成の時間がかかるとかいろいろ
一番の理由はシステムコールのオーバヘッドですよ
一行ずつチマチマ投げるとその都度システムコールが発行されます
これが結構重たい処理になります.システムコールが発行されると,その都度,ユーザ空間とカーネル空間の切り替え,CPUのレジスタの保存と復帰,メモリキャッシュのフラッシュが必要になりますまたCPUのパイプラインもストールします.
ですからこの手の高速化ではシステムコールの発行回数を最低限に抑える工夫が必須となります
その工夫の一つが,大きなバッファを用意して,複数回のシステムコールを,一つにまとめる方法です
printf(3)はシステムコールじゃないってのは余計な突込み?stdioライブラリ中のバッファ処理より高速なんだろう♯改行くるとwrite(2)してるとか
ページサイズかける文字数分の境界整列したバッファを用意しといて埋めた後グルグル回すとか#writeに渡した後の中身って保全されてると期待しちゃいかんのじゃなかったかな
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家
yes! (スコア:0)
yesコマンドなんて最初は「何だこれ?」と思ったけど
最近はPC起動するたびに使ってる気がする
何かと手間が省けるんだよね
地味イーーにものぐさができる
Re: (スコア:0)
初期のUNIXのシンプルさ、柔軟さを今に伝える貴重なプログラム。
...なのだが、GNU 版のソースとかを見るとロブ・パイクがUNIXは腐臭を放っていると発言したのも最もだと思わせる。
Re: (スコア:0)
でも例えばprintfを改良してどうにかなる問題じゃないからな。ループで問答する時のバッファをどうするかって話なんだから、まさにアルゴリズムの優劣が結果にダイレクトに反映されてるわけだ。
Re: (スコア:2)
アルゴリズムとは言い難い感じ。
一行ずつチマチマ投げるよりも、ページ境界に合うのを期待した大きい領域に何行も詰め込んで投げる方が早いよねっていう。
Re:yes! (スコア:0)
> 一行ずつチマチマ投げるよりも、ページ境界に合うのを期待した大きい領域に何行も詰め込んで投げる方が早いよねっていう。
なんで後者の方が早いんですか?
Re: (スコア:0)
境界またがったら2ページ分の操作が要るとか
というか、パディング分の領域が無駄になるとか
再構成の時間がかかるとか
いろいろ
Re:yes! (スコア:3, 参考になる)
一番の理由はシステムコールのオーバヘッドですよ
一行ずつチマチマ投げるとその都度システムコールが発行されます
これが結構重たい処理になります.システムコールが発行されると,その都度,ユーザ空間とカーネル空間の切り替え,
CPUのレジスタの保存と復帰,メモリキャッシュのフラッシュが必要になります
またCPUのパイプラインもストールします.
ですからこの手の高速化では
システムコールの発行回数を最低限に抑える工夫が必須となります
その工夫の一つが,大きなバッファを用意して,複数回のシステムコールを,一つにまとめる方法です
Re:yes! (スコア:2)
printf(3)はシステムコールじゃないってのは余計な突込み?
stdioライブラリ中のバッファ処理より高速なんだろう
♯改行くるとwrite(2)してるとか
ページサイズかける文字数分の境界整列したバッファを用意しといて
埋めた後グルグル回すとか
#writeに渡した後の中身って保全されてると期待しちゃいかんのじゃなかったかな