mbed-mruby GVL版マルチスレッドのヒープ使用量を調べた
しばらく間が空いたけれども、mbed-mrubyのスレッドの話の続きです。
下のmrubyのGVLでのマルチスレッド実装がされていますので、これをmbedにのせてみました。目的はmaster版とのスレッドが動いている時のヒープ使用量の比較です。
mirb - Embeddable Interactive Ruby Shell ================================================== size = 207299, acnt = 3860, fcnt = 562, max = 213044 ================================================== > a = DigitalOut.new LED1 => #<DigitalOut:0x200b34c8> ================================================== size = 214774, acnt = 3884, fcnt = 570, max = 263204 ================================================== > b = DigitalOut.new LED2 => #<DigitalOut:0x200b3360> ================================================== size = 222254, acnt = 3907, fcnt = 578, max = 270684 ================================================== > c = DigitalOut.new LED3 => #<DigitalOut:0x200b32d0> ================================================== size = 229748, acnt = 3931, fcnt = 586, max = 278178 ================================================== > t1 = Thread.new do * while 1 * a.toggle * wait 1 * end * end => #<Thread:0x200b3198> ================================================== size = 248814, acnt = 3992, fcnt = 607, max = 309523 ================================================== > t2 = Thread.new do * while 1 * b.toggle * wait 2 * end * end => #<Thread:0x200b2fe8> ================================================== size = 267892, acnt = 4053, fcnt = 628, max = 328601 ================================================== > t3 = Thread.new do * while 1 * c.toggle * wait 3 * end * end => #<Thread:0x200b2f28> ================================================== size = 286982, acnt = 4116, fcnt = 651, max = 347691 ================================================== > t1.join => nil ================================================== size = 290201, acnt = 4138, fcnt = 668, max = 347691 ================================================== > t2.join => nil ================================================== size = 293420, acnt = 4160, fcnt = 685, max = 347691 ================================================== > t3.join => nil ================================================== size = 296639, acnt = 4182, fcnt = 702, max = 349366 ================================================== >
size がヒープ使用量ですが、VMコピー版マルチスレッドは1スレッド起動毎にVM分の200Kくらいのヒープをとっていたけれど、こちらは全然増えません。
うーん、こっちのが良いですが、GVLってシングルコアの場合も何か不利益あるんだろうか。MPCoreのmbedでたら、もう一度も考えなおさないといけないけど、今後M7のmbedがでてきてもシングルコアだからなあ。
今回、理解せずひとまず載せてしまったので、ちゃんとmasterとどう違うか把握したいのと、次は速度面の比較もしたいです。