File: thread_local_var_bench.rb

package info (click to toggle)
ruby-concurrent 1.1.6%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 30,284 kB
  • sloc: ruby: 30,875; java: 6,117; ansic: 288; makefile: 9; sh: 6
file content (31 lines) | stat: -rwxr-xr-x 606 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env ruby

#$: << File.expand_path('../../lib', __FILE__)

require 'concurrent'
require 'concurrent/atomic/thread_local_var'
require 'benchmark'

include Concurrent

N_THREADS = 100
N_VARS    = 100

vars = N_VARS.times.collect { ThreadLocalVar.new(0) }

def test_threadlocal_perf(vars)
  threads = N_THREADS.times.collect do
    Thread.new do
      10000.times do
        index = rand(N_VARS)
        var   = vars[index]
        var.value = var.value + 1
      end
    end
  end
  threads.each(&:join)
end

Benchmark.bmbm do |bm|
  bm.report('ThreadLocalVar') { test_threadlocal_perf(vars) }
end