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
Haskellで並行プログラミングの練習
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Tomohiko Himura
May 08, 2016
Programming
0
310
Haskellで並行プログラミングの練習
LT駆動25
https://github.com/LTDD/Sessions/wiki/LT%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA25
Tomohiko Himura
May 08, 2016
Tweet
Share
More Decks by Tomohiko Himura
See All by Tomohiko Himura
Marpでmermaidは簡単だときいたけど
eiel
0
1.6k
バイナリ読むのにElixirしてみた
eiel
0
84
アジャイルはさておきMake People Awesomeしたい
eiel
0
180
レビューは最優先にするようにしている
eiel
0
320
再考 Fourkeys メトリクス
eiel
2
690
Test mockをSnapshot testする
eiel
0
140
devenvに入門した
eiel
1
120
関数プログラミングの考え方
eiel
1
340
逆コンウェイ作戦はフィードバックループを作るために 逆向きの流れをつくること (5分版)
eiel
0
450
Other Decks in Programming
See All in Programming
CSC307 Lecture 01
javiergs
PRO
0
690
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
170
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.4k
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
110
2026年 エンジニアリング自己学習法
yumechi
0
140
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
320
CSC307 Lecture 07
javiergs
PRO
1
560
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
220
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
5
580
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
390
Featured
See All Featured
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
Ruling the World: When Life Gets Gamed
codingconduct
0
150
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
740
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
67
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.6k
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
150
Code Reviewing Like a Champion
maltzj
527
40k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
93
Transcript
HaskellͰ ฒߦϓϩάϥϛϯάͷ࿅श 2016-05-07 LTۦಈ։ൃ25
ͻΉΒ ͱͻ͜ ฒߦ ฒྻ ࢄ ͲΕ͍͠
None
None
言葉にすれば 世界は変えられる
ฒߦϓϩάϥϛϯά Λ͡ΊͯΈΔ
なぜ並行プログラミング
CPUはもう速くならないらしい
速くならないけど 幅は広くなるらしい
コアの数は増える
複数のコアを有効に使わなければ プログラムは速くならない
複数のコアを使って 別々のタスクを実行する
ノンブロッキングI/Oの登場で 効果がでやすい(要出典)
コアの複数化で 効果がでやすい(要出典)
並列処理より入門しやすい
並行処理といえば Go言語らしい
真似をするところから はじめよう
IUUQRJJUBDPNTVJOJUFNTFDCG⒎EGE
None
1秒かかる処理 2秒かかる処理 3秒かかる処理
Go言語では Goルーチンとチャンネル で並行化
1秒かかる処理 2秒かかる処理 3秒かかる処理 終わるの待つ
Goルーチン • 軽量スレッド • 数kbしかつかわない • javaのスレッドは320kbとか使うらしい • 関数呼び出しに goってつけるだけ
たとえば javaで • 1クライアント 1スレッド割り当てる • サーバープロセスを考える • 320kb *
10,000 -> 約3GB
Goルーチンなら いっぱいつくれる
チャネル • Goルーチンがやり取りするのに利用 • メッセージパッシング • 共有メモリではなく • メッセージが入ってくるまで待つ
None
Αʔ͠ HaskellͰͬͯΈΑ͏
None
None
threadDelay マイクロ秒待てる
6秒かかる
(P )BTLFMM ฒߦԽ HP͚ͬͯͭΔ GPSL*0͚ͬͯͭΔ ௨৴ νϟωϧΛ͔ͭ͏ .7BSΛ͔ͭ͏
\
None
> だいたい同じ <
forkIO :: IO () -> IO ThreadId 第1引数を別のスレッドで実行
MVar 値が入ってくる前に 読み込みしようとすると 値が入ってくるまで待つ
予定どおり3秒で実行できた
ॻ͖ࠐΈΛ ผεϨουʹͯ͠ΈΔ
同時に実行すると出力が混ざる
軽量スレッドは プリエンプティブ 短い時間でスレッドが切り替わっている
出力は同一スレッドで やってみる
Control.Concurrent.Chan MVarみたいな無限キュー
Endがやってくるまで Chan を読み続けて 画面に表示 Endがやってきたら finished(MVar)に値を書き込み スレッドの終了を通知
ChanはMVarをつかって 実装されている
軽量スレッドとMVar が並行処理の基本単位
綺麗に表示された
めでたしめでたし
ファイルへの出力より ログの生成が早いと メモリがあふれるので注意
·ͱΊ
並行処理 • Communicating Sequential Processes • ってのが元になっている模様 • erlangやakka •
アクターモデル • そのまま分散できる • どちらもメッセージパッシング
CSP • いままでどおりかけて見通しがよい • 結構いろんな言語で使える模様
まとめ • HaskellでGoのコードは真似られそう • しかし、全く同じように動くわけではない • 正しく違いを理解しないといけない • HaskellはIOが型で分離される •
より良いコードがかけるはず