Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
fukuoka.rb 祝 #100!
Search
take_cheeze
July 20, 2018
0
520
fukuoka.rb 祝 #100!
take_cheeze
July 20, 2018
Tweet
Share
More Decks by take_cheeze
See All by take_cheeze
goluaをさわってみる
takecheeze
0
260
html5everをスクリプト言語から呼ぶ
takecheeze
0
180
mgemのCIを支える諸々
takecheeze
2
520
Go_2のドラフトを読む__エラー編_.pdf
takecheeze
0
1.4k
dep ensure浅掘り
takecheeze
0
330
LuaJIT as a Ruby backend
takecheeze
1
3k
Fukuoka Ruby Award 10th
takecheeze
1
180
コンパイル時計算への招待.pdf
takecheeze
1
1.1k
mrubyにとるRubyのシングルバイナリ運用
takecheeze
0
1k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
92
4.8k
Designing with Data
zakiwarfel
96
4.8k
A Tale of Four Properties
chriscoyier
151
22k
Optimizing for Happiness
mojombo
370
69k
Build your cross-platform service in a week with App Engine
jlugia
225
17k
GitHub's CSS Performance
jonrohan
1025
450k
Ruby is Unlike a Banana
tanoku
96
10k
Visualization
eitanlees
136
14k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
116
18k
Code Review Best Practice
trishagee
55
15k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
241
1.2M
Scaling GitHub
holman
457
140k
Transcript
minirakeを 並列化した話 @take-cheeze
mrubyのビルドに使うあいつ - Makefileはあるけど実体はrakeっぽいあいつ - Ruby 1.9でも動く
minirake - rakeのサブセット - 1000行未満でrakeのほしい機能が大体ある - MobiRubyの作者の方が導入
minirakeの問題点 - `-j` オプションがなかった(過去形) - ビルドスクリプトが副作用自由すぎてつらい(関数型言語信者(狂
minirakeに-jオプションを実装した - (Rubyの)パパが喜んでた - ダリフラのフトシは漢だと思う - ゴローが代役の方になってしまって残念だった。。。 - 最終話の録画に失敗した。。。 -
パパが喜んでたけど、いい実験台だった... - マルチなんちゃらプログラミングは難しい - なんか挙動がおかしいとは思っていた
実装方法 - 子プロセスは `Thread` で待って管理 - タスクは `Fiber` 上で実行 -
子プロセスを立ち上げると `FIber` が停止する - rakeは `ThreadGroup` でやっているが使い方がよくわからなかっ たので...
試行錯誤(実験したこと) - `Fiber.yield` だとちゃんと切り替わらないケースがある - あくまで可能性だったが、微妙な実装はリリースにのってほしくなかった - `resume` / `yield`
の代わりに、 `transfer` で置き換え - 同時実行の上限をうまく設定できてなかった - 実装終わったと思ったらあるある実装の抜け - タスクが上限を天元突破して動作してた(おかげで見つかった依存関係のバグ - OSたぶんよろしくやってたか、いいマシンで実行してた - 同時実行のバグを潰したら、CPUを食いつぶす - スリープを適切に入れてあげる - `pthread_yield` 相当がほしかった。。。
バグらせて、別のバグを見つける - ビルドシステムで依存漏れってよくありますよね? - 並列ビルドは、義務です
おまけ: rakeにもパッチ送ったよ - prerequisitesと打てない人のためのalias - https://github.com/ruby/rake/pull/268 - `prereqs` でほぼ半分のタイプ数 -
rakeでもorder only dependencyがほしい - https://github.com/ruby/rake/pull/269 - スクリプト内でprerequisitesからは除外される - 依存するコマンドをprereqsから除外するのに便利
おしまい ありがとうございました 入れられるかわからないけど、1.4にバックポートしたみ