SlideShare a Scribd company logo
1 of 51
Download to read offline
並列対決 Elixir × Go × C#
x Scala オマケでnode.js
Created by Enpedasi/twinbee ( [@enpedasi] )
2018/2/23
2018/2/25 Scala [@KugiyaJ]版 追加
powered by Marp
⾃⼰紹介
@enpedasi (えんぺだーし)
qiita : twinbee
フリーランスエンジニア
中2の時にZAT SOFT/⼤名マイコン学院より
MZ-700向けゲームレフュージー発売
BGM : Lo hiphopがお気に⼊り
概要
Elixir速いっていうけど、実際どうなの︖
Go/Scala Akka等 並列に強い処理系の中での優位点
は︖
オープン系ばかり話題になるけど、Microsoftを⾒
てみぬふりはダメだよね︖
初⾒でどこまで並⾏プログラミングができる︖
ストリーム集計対決
巨⼤CSVファイルを並列集計
各⾔語のストリームを使⽤
ストリームを制するものは、サービスを制する
- 登壇者のレベル
⾔語 経 験
node.js 納品実績あり
C# 納品実績あり/⾮同期開発経験なし
Elixir 3年間Watch
Scala
ハンズオンでWebアプリ作った
(Play/Skinny)
Go 経験なし
ここから作っていくよ︕
※ ⼀応 C / C++ / アセンブラ 10年以上 Delphi 20年経験は
あります
基礎⽤語の確認
並⾏・並列
並⾏処理 (Concurrent)
CPU数・コア数の限界を超えて複数の仕事を同時
に⾏うこと。 シングルスレッドでも該当する。
並列処理 (Pallarel)
複数のプロセッサやコアを使って、仕事を同時に
⾏うこと。
参考 ASCII倶楽部 Go⾔語と並列処理
ノンブロッキング・⾮同期
nginxやnode.jsが話題になった時代のテーマ
ノンブロッキング
にくじゃがをつっつきながら完成を確かめる。
つっつきながら別の料理を捌ける。
⾮同期
電⼦レンジに⼊れてチンと鳴るのを待つ。その間
別の料理に取り掛かる。
厳密に定義を追ってもしょうがないので、並⾏・
並列と区別がつけばOK
ストリーム
⽂字・画像・動画などが延々と流れていくイメー
ジ。始まりと終わりがない。
ストリームは加⼯部分のみを読み取り、処理する
ので最低限のメモリしか使わない。
ストリーム 問題点
サービスをストリームの加⼯機としてとらえる
と、⼊⼒をある⼤きさでぶった切って処理する必
要がある(時間やサイズ)。
ぶった切られたデータは、IOデバイスの都合で切
られるので、加⼯しやすい型(⾏・画像)に持っ
ていくには⼿間が必⽤
流れ待ってくれないので、バッファリングや再送
指⽰が必⽤ ⇒ 処理が複雑化
マルチタスクモデルとGC
Elixir Go C# Scala(JVM)
モデ
ル
軽量プ
ロセス
軽量ス
レッド
スレッド
プール?
スレッドプ
ール?
GC
単位
プロセ
ス
共有メ
モリ
共有メモ
リ
共有メモリ
※スレッドは共有メモリを使⽤するので、GCすると
全体が⽌まる
⾮同期ストリームのFramework
Elixir
Genstage/Flow
Scala
Akka
C# TPL DataFlow Node.js
Producer Source (ISoureBlock) reader
Produce-
Consumer
Flow (IPropergatorBlock) (pipe)
Consumer Sink (ITargetBlock) writer
Scala Akka は ErlangのActor リスペクト
GenStage は ScalaAkka Streams リスペクト
C# TPLもActorモデル(上記の表は無理やり)
Elixirの⾮同期ストリーム
GenStage
FlowのベースになっているBehavior
GenEventの改良版
Flow
GenStageがコールバック主体で実装していくのに
対し、より直観的に書ける。
Scala Akka Stream
GenStageやFlowがインスパイアされたライブラリ
Lightbend社(旧Typesafe社)提供
JVMで動作 Scala or Java対応
豊富なドキュメント
Pony langageの資料では Erlangと同等性能
twitterで#Akka what's wrong?って叫んだら中の⼈
が10分ぐらいでPR送ってくれた(Thak you for
ktoso! )
Akka Streams
Akkaのドキュメントの⼀部
GOの並列実装のバリエーション
Channel
make時にBackpresure指定可
Select 調停
複数のチャネルからの結果を判断
Goroutine
普通のファンクションの前にGOと書けば、⾮同期
実⾏を⾏う
C#の並列実装のバリエーション
Task async / Tasck await
TPL DataFlow
Actorモデルによる⾮同期ストリーム
Parallel Linq
コレクションの操作を並列で⾏う
コード実装
Elixirの実装(抜粋)
Source Code on Github
上記SourceCodeのElixirFlowOrgはリファクタリン
グ前の関数です
result =
filename
|> File.stream!
# データクレンジング
|> Flow.from_enumerable()
|> Flow.map( &( String.replace( &1, ",", "t" ) ) ) # ①CSV→
|> String.replace( "rn", "n" ) # ②CRLF
|> String.replace( """, "" ) ) ) # ③ダブ
# 集計
|> Flow.map( &( &1 |> String.split( "t" ) ) ) # ④タブで分割
|> Flow.map( &Enum.at( &1, 2 - 1 ) ) # ⑤2番⽬の項⽬を抽出
|> Flow.partition
|> Flow.reduce(
fn -> %{} end, fn( name, acc ) # ⑥同値の出現数を集計
-> Map.update( acc, name, 1, &( &1 + 1 ) ) end )
|> Enum.sort( &( elem( &1, 1 ) > elem( &2, 1 ) ) ) # ⑦多い順で
Goの実装(抜粋)
Source Code on Github.
最初に書いたコードでは1⾏リード毎にGo routine
を起動していた
さすがにそれはまずいので、Go Routineをワーカ
ーとしてマネージできるライブラリを探したが、
「公式」的なものはなかった。
次の記事を参考に、ワーカーの実装を⾏った。参
考 ⇒ golang の channel を使って Dispatcher-
Worker を作り goroutine 爆発させないようにする
Goでの実⾏イメージ
チャネルによるディスパッチ
func (w *worker) start() {
go func() {
for {
// register the current worker into the dispatch pool
w.dispatcher.pool <- w
select {
case v := <-w.data:
if bulkstr, ok := v.([][]string); ok {
wordMap := processData(bulkstr)
w.dispatcher.sink <- wordMap
}
w.dispatcher.wg.Done()
case <-w.quit:
return
}
}
}()
}
バルクデータをマップ化
func processData(r [][]string) map[string]int {
var m = map[string]int{}
for _, rec := range r {
m[ rec[aggColNo] ]++
}
return m
}
// チャネルからクラスタ化された集計結果を集める
func waitAndSum(sumMap map[string]int, d *Dispatcher, quit
for {
select {
case rec := <-d.sink:
for mk, mv := range rec {
sumMap[mk] += mv
}
case <-quit:
fmt.Println("quit")
return sumMap
default:
}
}
}
Scala Akka Streams 実装
(抜粋)
Source code on Github
↓ Tune up 注⽬︕
Tuned up ver by @KugiyaJ on Github
No Akka Source code by @KugiyaJ on Github
source
.via(CsvParsing.lineScanner())
.via(CsvToMap.withHeaders("firstname", "lastname", "gender"
.map(_.map(r => (r._1, r._2.utf8String))) // Map( birthday -
.filter(rec => rec.get(grp_col) != None)
.groupBy(30, r => r(grp_col)(0)) // 頭⼀⽂字でグループ分け
.async
.fold(acc_empty) { (acc: Map[String, Int], rec: Map[String
val word = rec(grp_col)
val cnt = acc.getOrElse(word, 0)
acc.updated(word, cnt + 1)
}
.mergeSubstreams
.via(Flow[Map[String, Int]].fold(acc_empty) { (acc: Map
acc ++ rec.map { case (k, v) => k -> (v + acc.getOrElse(k,
})
.runWith(Sink.foreach(e => {resultMap = e}))
.onComplete(done ⇒ {
val msec = (System.currentTimeMillis - start)
println(done)
resultMap.toSeq.sortWith(_._2 > _._2).take(10).foreach(pri
GroupByの第⼀引数には、サブストリームの数が
⼊る。集計キーが多い場合はSQL的に使えない。
ストリームをうまく分割するアイデアが⾒つから
なかったので、集計キーの1⽂字⽬でグループ化
効果がありそうな場所に.asyncを配置しても、1.5
倍遅い結果だった
※ 上記はLT時の内容です
Node.js(抜粋)
SourceCode on Github
const parser = csvParse({ delimiter: ',',
relax_column_count: true });
parser.on('data', (data) => {
const key = data[1]
sumMap.set(key,
sumMap.has(key) ? sumMap.get(key) + 1 : 1)
});
ストリームをラップしたcsv-parserを使⽤
CSV parserが⾏ごとにdataイベントを返すので、
都度集計処理
C# dotnet core 2.0 実装 抜粋
SourceCode on Github
static private async Task<ConcurrentDictionary<string, int>> Rea
{
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Open,
FileAccess.Read, FileShare.Read, bufferSize: 4096
)) {
StreamReader sr = new StreamReader(sourceStream)
string text;
while ((text = await sr.ReadLineAsync()) !=
{
var wd = text.Replace(""", string.Empty).Spli
wordMap.AddOrUpdate(wd, 1, (_key, val) => {
}
return wordMap;
}
}
・async/awaitによる⾮同期タスク制御
・StreamReader.readAsyncというぴったりの機能
・CocurrencyDictionaryという、これまたぴったり
なKVコレクション
対 決 結 果
Windows 10 Home Edition
Corei5 7200U@2.5G Hz (Kabylake)
2コア4スレッド 16GMemory
Windows10 Home edition 単位(秒)
Corei5 7200U@2.5G Hz 2コア4スレッド
⾏数 Elixir Go C# Node.js
30 万 0.3 1.2 1.5 10.5
300万 19 12 15 107
1200万 86 50 47 433
Scala (@KugiyaJ ⽒によるTune up)
Scala NoAkka Akka ← (LT時)
30 万 1.2 3.7
300万 10.7 19.7 27
1200万 35.1 53.6 101
C#とGoが速い
※ScalaはIntelliJ環境下のスコア
(2/25) Akkaを使⽤しないScalaが最速︕
Windows 2008 Server
Intel Xeon(R) CPU E31230 (32n
2011Q2)@ 3.2GHz
4コア8スレッド 8GMemory
Windows Server 2008 R2 8GB
Intel Xeon(R) CPU E31230 (32n 2011Q2)@ 3.2GHz 4
コア8スレッド (On-premises)
Elixir Go C# Scala Node.js
30万⾏
300万⾏
1200万⾏ 49 43 35
コア数が増えたことで、85秒⇒49秒へ猛追
C#も速度上がる。Windows上ではC#最速
(2/25)諸事情により⼀部のみのベンチ
Google Compute Engine
Debian 9 vCPUx8 16GByte
ここでLinuxでC#に問題発⽣
Unhandled Exception: System.ArgumantException
The index is equal to or greater than the
length of the array, or the number of elements in
dictionnary is greater than the available space
from idex to the end of destination array.
GCE Debian 9 vCPU 8 16GByte 単位(秒)
⾏数 Elixir Go C# Node.js
30万 0.09 1.2 Crush - 13
300万 9.6 11.4 Crush 137
1200万 40.1 44.8 Crush 549
Scala (@KugiyaJ ⽒によるTune up)
Scala NoAkka Akka ← (LT時)
30 万 1.2
300万 9.5 19.7
1200万 38.3 53.6 116
ElixirがGoを抜きさる
C#は例外クラッシュ
Node.jsはWindowsより1割ほど速度低下
ScalaはCPUあんまり使ってない。プログラムが問
題かも。 ⇒ 2/25 @KugiyaJ⽒の⼿により最速に
Docker 2GB/2Core Debian
Microsoft公式 dotnetcoreコンテナ
Elixir Go C# Scala Node.js
30万⾏ 0.3 2.2 Crush
300万⾏ 29 23 Crush
1200万⾏ 118 Killed Crush
C#は例外クラッシュ
Goはメモリ不⾜でTask Kill
まとめ
Elixir/Go/C# ともにNode.jsの5 - 10倍の速度
Elixir Flow
⇒コア数が多いほど真価を発揮
⇒コード量の少い︕学習コスト少ない︕性能⾼い︕
どの環境でも安定度が抜群
⇒Shift-JIS対応や商⽤RDBとの接続に課題
GO
⇒並列⼊⾨⽤としては最適
⇒GoroutineはGCされないので、メモリ管理が負
担。1200万件では8GBのメモリを消費
⇒コード量がかさむ。⼤規模PJでは⾟そう
⇒VS CodeのIDE⼒が強⼒
Scala Akka
⇒InnteliJかしこい。型はあまり気にしなくてOK
⇒なにより実績がある。ドキュメントが⼿厚い
⇒環境構築が⾟い。
⇒IntelliJやDockerコンテナ使っている間はよい
が、そこから外れるとコストが⼤きい
⇒コンパイル時のメモリ消費⼤。今回のPGでも
2.5Gほどメモリを消費する
⇒Oracle RDBを重⽤してる⾝としてはOracleの企
業姿勢がリスク(JVM)
C#
⇒Windowsでは最速。Dotnet core動向に注⽬
⇒なんでも揃えます感
⇒VisualStudio賢い。でも重い
Elixir Go C# Scala Node.js
パフォーマンス B+ 〜A A A A D
ポーテーション 〇 〇 ? 〇 〇
安定度 S B A A A
環境構築コスト A S B C A
学習コスト B+ A B+ B- A
記述量 S C A S A
メンテナンス性 A B A A A
ドキュメント B+ A A S A
Elixirの安定度がSなのはGCの仕組による(プロセ
ス単位)
2/25 追記
アドバイスを頂きました ⇒『Akkaはローカルで
の並列処理に特化したミドルウェアではないの
で、並列コレクションを使った⽅が早くなったの
だと思われます』
今回の企画は「Elixir Flowのコードを他の並⾏ライ
ブラリでも試してみよう」というノリで始めたの
ですが、どうやら並⾏処理の性能⽐較には実は向
いてない内容ということが判明しました。
ふさわしい企画を考えて、またトライしたいで
す︕
Enjoy Elixir Programming!
ご清聴ありがとうございました

More Related Content

What's hot

オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?Yoshitaka Kawashima
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
reduxのstate設計の話
reduxのstate設計の話reduxのstate設計の話
reduxのstate設計の話ayatas0623
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善Ito Takayuki
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜Yoshiki Nakagawa
 

What's hot (20)

オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
reduxのstate設計の話
reduxのstate設計の話reduxのstate設計の話
reduxのstate設計の話
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
 

Similar to 並列対決 Elixir × Go × C# x Scala , Node.js

Silkによる並列分散ワークフロープログラミング
Silkによる並列分散ワークフロープログラミングSilkによる並列分散ワークフロープログラミング
Silkによる並列分散ワークフロープログラミングTaro L. Saito
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部NVIDIA Japan
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Takeshi Arabiki
 
Scalamacrosについて
ScalamacrosについてScalamacrosについて
Scalamacrosについてdekosuke
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesTakeshi Komiya
 
Introduction new features in Spark 3.0
Introduction new features in Spark 3.0Introduction new features in Spark 3.0
Introduction new features in Spark 3.0Kazuaki Ishizaki
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsKohei KaiGai
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-Kota Mizushima
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenMITSUNARI Shigeo
 
Project Loom + Project Panama
Project Loom + Project PanamaProject Loom + Project Panama
Project Loom + Project PanamaYuichi Sakuraba
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77nkt77
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77nkt77
 

Similar to 並列対決 Elixir × Go × C# x Scala , Node.js (20)

Silkによる並列分散ワークフロープログラミング
Silkによる並列分散ワークフロープログラミングSilkによる並列分散ワークフロープログラミング
Silkによる並列分散ワークフロープログラミング
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
 
Scalamacrosについて
ScalamacrosについてScalamacrosについて
Scalamacrosについて
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
 
Introduction new features in Spark 3.0
Introduction new features in Spark 3.0Introduction new features in Spark 3.0
Introduction new features in Spark 3.0
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
Rpscala2011 0601
Rpscala2011 0601Rpscala2011 0601
Rpscala2011 0601
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
 
Project Loom + Project Panama
Project Loom + Project PanamaProject Loom + Project Panama
Project Loom + Project Panama
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
 

並列対決 Elixir × Go × C# x Scala , Node.js