SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Downloaden Sie, um offline zu lesen
mrubyのFiberを
試してみた

Rubyist九州、近畿⼤大学
⼭山崎重⼀一郎郎
Fiberと関数
¡ Fiber:  オブジェクトを継続利利⽤用する
¡ 関数:呼ばれるたびに動作環境を⽣生成
組込み処理理
¡ 永続的なプロセスが動いている
定期的なメモリーの開放が必要

¡ センサーからの時系列列データの収集
正確な時間間隔で動いてほしい
GCで不不意に⽌止まるのは困る
実験してみた
¡ Rubyとmrubyを使⽤用(MacOSX上で)
¡ RubyはGC.statでヒープ量量を計測可能
¡ mrubyは実⾏行行時間のみ計測可能
GC.stat
Rubyの動作環境
GC.stat
{
    :count                    =>  18,                     #GCの回数
    :heap_̲used            =>  77,    
#
    :heap_̲length        =>  77,
    :heap_̲increment  =>  0,
    :heap_̲live_̲num    =>  23287,  #⽣生きているヒープの数
    :heap_̲free_̲num    =>  8115,
    :heap_̲final_̲num  =>  0,
}
移動平均
¡ センサーからのデータの系列列の平均
新しい⼊入⼒力力のたびに計算
バッファのサイズは⼀一定
移動平均関数版

(バッファはクロージャでメモ化)
SIZE=256	 	 	 	 	 	 	 	 	 	 	 	 	 



#バッファサイズ


aveb=lambda{|b|i=0	 	 	 



#クロージャ作成用関数


	 	 lambda{b[i]=rand(1024)	 	 #センサー入力のつもり

	 	 	 	 i=(i+1)%SIZE

	 	 	 	 b.reduce(:+).to_f/SIZE}}	 #移動平均の計算

buf=Array.new(SIZE,0)

ave=aveb[buf]	 	 








	 	 #移動平均関数の生成
移動平均ファイバ版
SIZE=256

avefb=lambda{|b|i=0

	 	 Fiber.new{loop{b[i]=rand(1024)

	 	 	 	 i=(i+1)%SIZE

	 	 	 	 Fiber.yield	 b.reduce(:+).to_f/SIZE}}}

buf=Array.new(SIZE,0)

avef=avefb[buf]
1e+05

C-Rubyで
関数を100回実⾏行行したときの
ヒープサイズと実⾏行行時間の変化

4e+04

ヒープサイズ

6e+04

rubyfunc

8e+04

    

0

20

40

60

80

100

rt

実⾏行行時間

0.0150 0.0155 0.0160 0.0165 0.0170

Time

0

20

40

60
Time

80

100
C-Rubyで
Fiberを100回実⾏行行したときの
ヒープサイズと実⾏行行時間の変化

29000
27000

f

ヒープサイズ

31000

              

20

40

60

80

100

60

80

100

Time

0.018 0.019 0.020 0.021 0.022 0.023

実⾏行行時間

t

0

0

20

40
Time
mrubyは
GCがちょっと違う
¡ インクリメンタルに⾏行行われる
¡ GC.statはない
¡ コンパイルされる
mruby
実⾏行行時間移動平均関数版

0.125
0.123

t1

0.127

0.129

      

0

20

40

60
Time

80

100
mruby
実⾏行行時間移動平均ファイバー版

0.130
0.128
0.126

t

0.132

0.134

      

0

20

40

60
Time

80

100
----ave.rb--

SIZE=256

aveb=lambda{|b|i=0

	 	 lambda{b[i]=rand(1024)

	 	 	 	 i=(i+1)%SIZE

	 	 	 	 b.reduce(:+).to_f/SIZE}}

buf=Array.new(SIZE,0)

ave=aveb[buf]

test1=lambda{m=[]

	 	 100.times{t0=Time.now

	 	 	 	 (1..1000).map{ave[]}

	 	 m.push	 (Time.now-t0)}

m}

puts	 test1[]


mruby
移動平均関数版
----avefb.rb--

SIZE=256

avefb=lambda{|b|i=0

	 	 Fiber.new{loop{b[i]=rand(1024)

	 	 	 	 i=(i+1)%SIZE

	 	 	 	 Fiber.yield	 b.reduce(:+).to_f/
SIZE}}}

buf=Array.new(SIZE,0)

avef=avefb[buf]

test2=lambda{m=[]

	 	 100.times{t0=Time.now

	 	 	 	 (1..1000).map{avef.resume}

	 	 m.push	 (Time.now-t0)}

m}

puts	 test2[]


mruby
移動平均Fiber版

Weitere ähnliche Inhalte

Was ist angesagt?

202003 functiontalkinnotesknowsworkshop20th
202003 functiontalkinnotesknowsworkshop20th202003 functiontalkinnotesknowsworkshop20th
202003 functiontalkinnotesknowsworkshop20thSatoru Abe
 
Omochi-Renderer2@レイトレ合宿3!!! - お餅
Omochi-Renderer2@レイトレ合宿3!!! - お餅Omochi-Renderer2@レイトレ合宿3!!! - お餅
Omochi-Renderer2@レイトレ合宿3!!! - お餅omochi64
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)Narihiro Nakamura
 
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshopSatoru Abe
 
Webサーバの性能測定
Webサーバの性能測定Webサーバの性能測定
Webサーバの性能測定Ryo Maruyama
 
20131026 garbage collection in .net framework
20131026 garbage collection in .net framework20131026 garbage collection in .net framework
20131026 garbage collection in .net frameworkTakayoshi Tanaka
 
JRuby on Rails on JBoss
JRuby on Rails on JBossJRuby on Rails on JBoss
JRuby on Rails on JBossbose999
 
Maglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayacMaglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayacGosuke Miyashita
 
kpfx07 LT ruby-processingでイケメンになりたい
kpfx07 LT ruby-processingでイケメンになりたいkpfx07 LT ruby-processingでイケメンになりたい
kpfx07 LT ruby-processingでイケメンになりたいkoki_h
 
20160618 第23回シェル芸勉強会LT コマンドプロンプト芸
20160618 第23回シェル芸勉強会LT コマンドプロンプト芸20160618 第23回シェル芸勉強会LT コマンドプロンプト芸
20160618 第23回シェル芸勉強会LT コマンドプロンプト芸kunst1080
 
第四回 #渋谷java オープニング
第四回 #渋谷java オープニング第四回 #渋谷java オープニング
第四回 #渋谷java オープニングKazuhiro Serizawa
 
Git svnではじめる忍者のごとく潜むgit
Git svnではじめる忍者のごとく潜むgitGit svnではじめる忍者のごとく潜むgit
Git svnではじめる忍者のごとく潜むgitKazuki Sato
 
OpenLayersで始める地図の操作
OpenLayersで始める地図の操作OpenLayersで始める地図の操作
OpenLayersで始める地図の操作Yuki Yazaki
 
2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_aTom Hayakawa
 
WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話翔 石井
 
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たFirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たKenjiro Kubota
 

Was ist angesagt? (20)

ServerSideJavaScript
ServerSideJavaScriptServerSideJavaScript
ServerSideJavaScript
 
202003 functiontalkinnotesknowsworkshop20th
202003 functiontalkinnotesknowsworkshop20th202003 functiontalkinnotesknowsworkshop20th
202003 functiontalkinnotesknowsworkshop20th
 
Omochi-Renderer2@レイトレ合宿3!!! - お餅
Omochi-Renderer2@レイトレ合宿3!!! - お餅Omochi-Renderer2@レイトレ合宿3!!! - お餅
Omochi-Renderer2@レイトレ合宿3!!! - お餅
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)
 
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop
202006 のの会@関数Talk 21st @function-talk-in-notesknows-workshop
 
Webサーバの性能測定
Webサーバの性能測定Webサーバの性能測定
Webサーバの性能測定
 
20131026 garbage collection in .net framework
20131026 garbage collection in .net framework20131026 garbage collection in .net framework
20131026 garbage collection in .net framework
 
JRuby on Rails on JBoss
JRuby on Rails on JBossJRuby on Rails on JBoss
JRuby on Rails on JBoss
 
Maglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayacMaglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayac
 
kpfx07 LT ruby-processingでイケメンになりたい
kpfx07 LT ruby-processingでイケメンになりたいkpfx07 LT ruby-processingでイケメンになりたい
kpfx07 LT ruby-processingでイケメンになりたい
 
20160618 第23回シェル芸勉強会LT コマンドプロンプト芸
20160618 第23回シェル芸勉強会LT コマンドプロンプト芸20160618 第23回シェル芸勉強会LT コマンドプロンプト芸
20160618 第23回シェル芸勉強会LT コマンドプロンプト芸
 
第四回 #渋谷java オープニング
第四回 #渋谷java オープニング第四回 #渋谷java オープニング
第四回 #渋谷java オープニング
 
Git svnではじめる忍者のごとく潜むgit
Git svnではじめる忍者のごとく潜むgitGit svnではじめる忍者のごとく潜むgit
Git svnではじめる忍者のごとく潜むgit
 
#readghc なう
#readghc なう#readghc なう
#readghc なう
 
OpenLayersで始める地図の操作
OpenLayersで始める地図の操作OpenLayersで始める地図の操作
OpenLayersで始める地図の操作
 
CRubyGCの並列世界
CRubyGCの並列世界CRubyGCの並列世界
CRubyGCの並列世界
 
2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a
 
WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話WebGLで浮動小数点テクスチャを扱う話
WebGLで浮動小数点テクスチャを扱う話
 
20120721_ishkawa
20120721_ishkawa20120721_ishkawa
20120721_ishkawa
 
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たFirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
 

Ähnlich wie mrubyのfiberを試してみた

RubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフRubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフNarihiro Nakamura
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)Shuyo Nakatani
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoTsuyoshi Yamamoto
 
Rubinius Under a Microscope
Rubinius Under a MicroscopeRubinius Under a Microscope
Rubinius Under a Microscope高広 内山
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRubymametter
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考えるchonaso
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 

Ähnlich wie mrubyのfiberを試してみた (9)

RubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフRubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフ
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
 
Introduction pp.js
Introduction pp.jsIntroduction pp.js
Introduction pp.js
 
Rubinius Under a Microscope
Rubinius Under a MicroscopeRubinius Under a Microscope
Rubinius Under a Microscope
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 

Mehr von Kindai University

Blockchain and Virtual Currency - Technical issues -
Blockchain and Virtual Currency- Technical issues -Blockchain and Virtual Currency- Technical issues -
Blockchain and Virtual Currency - Technical issues -Kindai University
 
ブロックチェーンエコノミーのコンセンサスとガバナンス
ブロックチェーンエコノミーのコンセンサスとガバナンスブロックチェーンエコノミーのコンセンサスとガバナンス
ブロックチェーンエコノミーのコンセンサスとガバナンスKindai University
 
福岡ブロックチェーン・エコノミー勉強会セミナー
福岡ブロックチェーン・エコノミー勉強会セミナー福岡ブロックチェーン・エコノミー勉強会セミナー
福岡ブロックチェーン・エコノミー勉強会セミナーKindai University
 
福岡ブロックチェーン・エコノミー勉強会公開版
福岡ブロックチェーン・エコノミー勉強会公開版福岡ブロックチェーン・エコノミー勉強会公開版
福岡ブロックチェーン・エコノミー勉強会公開版Kindai University
 
ブロックチェーンによるデータガバナンスと社会基盤の再構築
ブロックチェーンによるデータガバナンスと社会基盤の再構築ブロックチェーンによるデータガバナンスと社会基盤の再構築
ブロックチェーンによるデータガバナンスと社会基盤の再構築Kindai University
 
やっぱりブロックチェインより仮想通貨
やっぱりブロックチェインより仮想通貨やっぱりブロックチェインより仮想通貨
やっぱりブロックチェインより仮想通貨Kindai University
 
FinTechと金融サービスの将来像
FinTechと金融サービスの将来像FinTechと金融サービスの将来像
FinTechと金融サービスの将来像Kindai University
 
仮想通貨のブロックチェイン技術によるFinTech
仮想通貨のブロックチェイン技術によるFinTech仮想通貨のブロックチェイン技術によるFinTech
仮想通貨のブロックチェイン技術によるFinTechKindai University
 
ビットコイン福岡勉強会法的課題
ビットコイン福岡勉強会法的課題ビットコイン福岡勉強会法的課題
ビットコイン福岡勉強会法的課題Kindai University
 
ブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocolブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocolKindai University
 
電気マネーでエネルギー問題解決
電気マネーでエネルギー問題解決電気マネーでエネルギー問題解決
電気マネーでエネルギー問題解決Kindai University
 
電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)Kindai University
 
薬院サルー仮想通貨プロジェクト
薬院サルー仮想通貨プロジェクト薬院サルー仮想通貨プロジェクト
薬院サルー仮想通貨プロジェクトKindai University
 

Mehr von Kindai University (20)

Blockchain and Virtual Currency - Technical issues -
Blockchain and Virtual Currency- Technical issues -Blockchain and Virtual Currency- Technical issues -
Blockchain and Virtual Currency - Technical issues -
 
Gbec finance and blockchain
Gbec finance and blockchainGbec finance and blockchain
Gbec finance and blockchain
 
Blockchian definition
Blockchian definitionBlockchian definition
Blockchian definition
 
Blockchain economy
Blockchain economyBlockchain economy
Blockchain economy
 
ブロックチェーンエコノミーのコンセンサスとガバナンス
ブロックチェーンエコノミーのコンセンサスとガバナンスブロックチェーンエコノミーのコンセンサスとガバナンス
ブロックチェーンエコノミーのコンセンサスとガバナンス
 
福岡ブロックチェーン・エコノミー勉強会セミナー
福岡ブロックチェーン・エコノミー勉強会セミナー福岡ブロックチェーン・エコノミー勉強会セミナー
福岡ブロックチェーン・エコノミー勉強会セミナー
 
福岡ブロックチェーン・エコノミー勉強会公開版
福岡ブロックチェーン・エコノミー勉強会公開版福岡ブロックチェーン・エコノミー勉強会公開版
福岡ブロックチェーン・エコノミー勉強会公開版
 
ブロックチェーンによるデータガバナンスと社会基盤の再構築
ブロックチェーンによるデータガバナンスと社会基盤の再構築ブロックチェーンによるデータガバナンスと社会基盤の再構築
ブロックチェーンによるデータガバナンスと社会基盤の再構築
 
やっぱりブロックチェインより仮想通貨
やっぱりブロックチェインより仮想通貨やっぱりブロックチェインより仮想通貨
やっぱりブロックチェインより仮想通貨
 
FinTechと金融サービスの将来像
FinTechと金融サービスの将来像FinTechと金融サービスの将来像
FinTechと金融サービスの将来像
 
Congre chain説明資料
Congre chain説明資料Congre chain説明資料
Congre chain説明資料
 
仮想通貨のブロックチェイン技術によるFinTech
仮想通貨のブロックチェイン技術によるFinTech仮想通貨のブロックチェイン技術によるFinTech
仮想通貨のブロックチェイン技術によるFinTech
 
ビットコイン福岡勉強会法的課題
ビットコイン福岡勉強会法的課題ビットコイン福岡勉強会法的課題
ビットコイン福岡勉強会法的課題
 
ブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocolブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocol
 
Open fintech and Kachatter
Open fintech and KachatterOpen fintech and Kachatter
Open fintech and Kachatter
 
電気マネーでエネルギー問題解決
電気マネーでエネルギー問題解決電気マネーでエネルギー問題解決
電気マネーでエネルギー問題解決
 
仮想通貨実験計画
仮想通貨実験計画仮想通貨実験計画
仮想通貨実験計画
 
Bit Nexus
Bit NexusBit Nexus
Bit Nexus
 
電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)
 
薬院サルー仮想通貨プロジェクト
薬院サルー仮想通貨プロジェクト薬院サルー仮想通貨プロジェクト
薬院サルー仮想通貨プロジェクト
 

mrubyのfiberを試してみた