Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Parallel::Pipesの紹介
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Shoichi Kaji
May 31, 2025
Programming
1.2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Parallel::Pipesの紹介
2025/05/31 Houtou.pm #1
Shoichi Kaji
May 31, 2025
More Decks by Shoichi Kaji
See All by Shoichi Kaji
go-exhaustruct linterのすすめ
skaji
0
140
宿泊予約サイトにおける検索と料金計算の両立
skaji
2
4.3k
昔のGo, 今のGo ~比較, ソート編~
skaji
0
320
Perl Quiz
skaji
0
190
cpm at PerlCon 2019
skaji
0
160
Perl5 Package Manager
skaji
0
810
Internal of cpm
skaji
0
670
How to execute external programs in Perl
skaji
3
760
Writing Perl with w0rp/ale
skaji
0
2.5k
Other Decks in Programming
See All in Programming
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
240
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
210
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
480
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.5k
Simple Storage Service(S3) is not simple
iwatsukayura
0
220
ジョジョの世界をXRで再現する
mofurune
0
140
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
560
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
400
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
Workers Cache を知る
syumai
0
340
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
190
Featured
See All Featured
Building an army of robots
kneath
307
47k
We Are The Robots
honzajavorek
0
390
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Designing for Performance
lara
612
70k
Odyssey Design
rkendrick25
PRO
2
860
Faster Mobile Websites
deanohume
310
32k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Balancing Empowerment & Direction
lara
6
1.3k
Thoughts on Productivity
jonyablonski
76
5.4k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
510
Code Reviewing Like a Champion
maltzj
529
40k
Transcript
Parallel::Pipesͷհ Shoichi Kaji
࣍ • Perlͷฒྻ/ฒߦॲཧ • PerlͷforkϞδϡʔϧ • Parallel::ForkManager • Parallel::Prefork •
ฒྻCPANΫϥΠΞϯτΛ࡞Γ͍ͨʂ • Parallel::PipesΛ࡞ͬͨ • ʑͷPerlεΫϦϓτʹฒྻॲཧΛ
Perlͷฒྻ/ฒߦॲཧ • PerlʹҰԠthread͕͋Δ͕ɺ5.20ΑΓެࣜʹ discouragedͱͳ͍ͬͯΔ • Πϕϯτۦಈʹؔͯ͠ɺPerlຊମʹͦͷαϙʔτ ͳ͍͕ɺ͍͔ͭ͘ͷ࣭ͷߴ͍Ϟδϡʔϧ͕ͦͷػೳΛ ఏڙ͍ͯ͠Δ: AnyEvent, Mojo,
IO::Async, etc • forkͯ͠ෳϓϩηε্ཱͪ͛ɺͦΕͰฒྻॲཧΛ͢ ΔબࢶͪΖΜ͋Δɻࠓ͜͜Λѻ͍͍ͨ
PerlͷforkϞδϡʔϧ • forkͯ͠ෳͷchildϓϩηεΛىಈ͠ɺchildϓϩηεͷཧɺ σʔλͷड͚͠Λखॿ͚ͯ͘͠ΕΔϞδϡʔϧͱͯ͠༗໊ͳͷ2બ • Parallel::ForkManager • Balazs Szabo͞Μ࡞ •
͔ͳΓੲ͔Β͋ΔϞδϡʔϧ • Parallel::Prefork • Oku Kazuho͞Μ࡞ • HTTP server StartletͰΘΕ͍ͯΔ
Parallel::ForkManager • preforkͰͳ͘ॲཧͷͨͼʹ ຖճforkΛݺͿελΠϧ • ൺֱతCLIͳͲͰΘΕΔ Πϝʔδ • fi leܦ༝Ͱchildϓϩηεͷ
݁ՌΛड͚औΕΔ
Parallel::ForkManager ॲཧ։࢝ ॲཧऴྃ parent child child child child parent childʹೖྗσʔλΛ͢
child͔Β݁ՌσʔλΛड͚औΔ
Parallel::Prefork • σʔϞϯϓϩηε༻ • childϓϩηεͷࢹ • γάφϧϋϯυϦϯά • childϓϩηεΛҰఆʹอͭ •
parent, childϓϩηεؒͰͷ σʔλͷड͚͠ػೳ༗͍ͯ͠ͳ͍
Parallel::Prefork ॲཧ։࢝ ॲཧऴྃ parent child child child child childΛࢹ͢Δ child
ฒྻCPANΫϥΠΞϯτΛ࡞Γ͍ͨ! • CPANϞδϡʔϧΛฒྻʹΠϯετʔϧͰ͖ΔCPAN client cpmΛ࡞ͬͨ • "CPANϞδϡʔϧΠϯετʔϧ"ΛɺͦΕࣗಠཱ࣮ͯ͠ߦͰ͖Δࡉ͔͍λεΫʹΘ͚ɺͦΕ Λฒྻʹॲཧ͍ͯ͘͠ઓུΛͨͯͨɻͱͳΔͱࡉ͔͍λεΫΛͲΜͲΜchildϓϩηεʹ͛ Δɺॲཧ͕ऴΘͬͨΒଈ࠲ʹ݁ՌΛಘΔɺͱ͍͏Έ͕ཉ͍͠ •
Parallel::ForkManager ? • childϓϩηεىಈ࣌ʹλεΫΛ1ͭͤΔͷΈͰԿͤͳ͍ • ݁Ռͷड͚औΓ͕ fi leϕʔεͩͱɺ݁Ռ͕ग़͍ͯΔ͜ͱʹଈ࠲ʹؾ͚ͳ͍ • Parallel::Prefork ? • childϓϩηεͱͷσʔλͷΓͱΓͷػߏ༻ҙ͞Ε͍ͯͳ͍ • childϓϩηεΛࢹͯ͠΄͍͠Θ͚Ͱͳ͍
ฒྻCPANΫϥΠΞϯτΛ࡞Γ͍ͨ! ॲཧ։࢝ ॲཧऴྃ parent child child child child childͱํʹσʔλΛΓͱΓ͍ͨ͠ childͷॲཧ͕ऴΘͬͨ͜ͱΛଈ࠲ʹݕ͍ͨ͠
-> pipeͱselectͰ࣮ݱͰ͖ͦ͏ʂ child
Parallel::Pipes • Parallel::PipesΛ࡞ͬͨ • preforkͨ͠childϓϩηεͱ pipeͰํʹଓ͠ taskɺ݁Ռͷड͚͠Λߦ͏ɻ pipeΛselect͠ɺॲཧऴྃΛ ଈ࠲ʹݕ͢Δ •
Parallel::PipescpmͷதͰΘΕ cpmͷͦ͞ͷͷͱͳ͍ͬͯΔ
Parallel::Pipes • cpmͰͷParallel::Pipesͷ͍ํ ͋Δtaskͷ͕ྃผͷtaskΛੜΉ ্ؔɺٕతͰ͋Δ • ҰํͰParallel::Pipes::App->map ୯ʹΈࠐΈؔmapͷฒྻ൛ ͱࢥͬͯ͏͜ͱͰ͖Δ •
ʑͷPerlεΫϦϓτʹ ฒྻॲཧΛ • Perlbetter shellͱݴΘΕΔ • Έͳ͞Μʑͷࡉʑͨ͠λεΫΛPerlεΫϦϓτΛॻ͘͜ͱͰ͜ͳ͍ͯ͠Δͱࢥ͏ • ͦ͏ͨ͠εΫϦϓτͰฒྻॲཧΛॻ͘ͷɺͳ͔ͳ͔ͳ͍Α͏ʹࢥ͏ •
ҰํͰ Parallel::Pipes::App->mapΛ͔ͳΓͷέʔεͰɺ ΈࠐΈؔmapͷdrop in replacement ͱͯ͑͠Δ • ͪΐͬͱͨ͠ͷͰฒྻԽ͘͠ͳΔͱɺલఏ͕มΘΔ 😉 • ʑͷPerlεΫϦϓτʹฒྻॲཧΛೖΕͯΈΔͷͲ͏ ? • ྫ: https://github.com/skaji/binary-install/blob/main/src/lib/App.pm#L500 https://github.com/skaji/build.pl/blob/main/src/lib/App.pm#L242
·ͱΊ • PerlͷฒྻॲཧϞδϡʔϧParallel::PipesΛհ ͨ͠ • cpm෦ͰΈʹΘΕ͍ͯΔ • ҰํɺͦΕΈࠐΈؔmapͷ͓खܰฒྻ൛ͱ ͯ͠͏͜ͱͰ͖Δ •
ʑͷPerlεΫϦϓτͰฒྻॲཧΛ 😉