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
590
fukuoka.rb 祝 #100!
take_cheeze
July 20, 2018
Tweet
Share
More Decks by take_cheeze
See All by take_cheeze
goluaをさわってみる
takecheeze
0
310
html5everをスクリプト言語から呼ぶ
takecheeze
0
210
mgemのCIを支える諸々
takecheeze
2
530
Go_2のドラフトを読む__エラー編_.pdf
takecheeze
0
1.5k
dep ensure浅掘り
takecheeze
0
390
LuaJIT as a Ruby backend
takecheeze
1
3.4k
Fukuoka Ruby Award 10th
takecheeze
1
250
コンパイル時計算への招待.pdf
takecheeze
1
1.3k
mrubyにとるRubyのシングルバイナリ運用
takecheeze
0
1.2k
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
48
7.6k
Automating Front-end Workflow
addyosmani
1369
200k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Gamification - CAS2011
davidbonilla
80
5.2k
How to Ace a Technical Interview
jacobian
276
23k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
176
52k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
490
Practical Orchestrator
shlominoach
186
10k
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にバックポートしたみ