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
670
0
Share
fukuoka.rb 祝 #100!
take_cheeze
July 20, 2018
More Decks by take_cheeze
See All by take_cheeze
goluaをさわってみる
takecheeze
0
380
html5everをスクリプト言語から呼ぶ
takecheeze
0
260
mgemのCIを支える諸々
takecheeze
2
560
Go_2のドラフトを読む__エラー編_.pdf
takecheeze
0
1.7k
dep ensure浅掘り
takecheeze
0
460
LuaJIT as a Ruby backend
takecheeze
1
3.8k
Fukuoka Ruby Award 10th
takecheeze
1
280
コンパイル時計算への招待.pdf
takecheeze
1
1.4k
mrubyにとるRubyのシングルバイナリ運用
takecheeze
0
1.4k
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
From π to Pie charts
rasagy
0
160
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
790
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
120
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
370
Navigating Team Friction
lara
192
16k
Paper Plane
katiecoart
PRO
1
49k
The Limits of Empathy - UXLibs8
cassininazir
1
290
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
210
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にバックポートしたみ