Skip to content

Instantly share code, notes, and snippets.

@spytheman
Created January 16, 2020 08:53
Show Gist options
  • Select an option

  • Save spytheman/c610056f2fa45d0b012b182e98532620 to your computer and use it in GitHub Desktop.

Select an option

Save spytheman/c610056f2fa45d0b012b182e98532620 to your computer and use it in GitHub Desktop.
import time
type Task fn (data voidptr)
pub fn (t Task) str() string {
return 'Task{ ${ptr_str(t)} }'
}
fn task_default(data voidptr){
// println('task_default: $data')
}
fn task_zero(data voidptr){
mut i := &int(data)
*i = 0
}
fn task_multiply_int(data voidptr){
mut i := &int(data)
*i = *i * 100
}
struct Job {
mut:
task Task = task_default as Task
data voidptr
}
fn (j Job) execute(){
t := j.task
if isnil(t){
return
}
t( j.data )
}
fn (jobs []Job) execute(){
for j in jobs {
j.execute()
}
}
fn main(){
n := 1000*1000
mut data := [0].repeat(n)
mut jobs := [Job{ data:voidptr(0) }].repeat(n)
for i:=0; i<jobs.len; i++{
data[i] = i
jobs[i].data = &data[i]
match i % 3 {
0 { jobs[i].task = task_zero as Task }
1 { jobs[i].task = task_multiply_int as Task }
else {}
}
}
println('Before: data[at start]:' + data[0..10].str() )
println('Before: data[at end]:' + data[ data.len - 10 .. data.len].str() )
sticks := time.ticks()
jobs.execute()
eticks := time.ticks()
println('After : data[at start]:' + data[0..10].str() )
println('After : data[at end]:' + data[ data.len - 10 .. data.len].str() )
println('Execution took: ${eticks-sticks}ms')
}
@spytheman

Copy link
Copy Markdown
Author

On my Intel(R) Core(TM) i3-3225 CPU @ 3.30GHz, I get:

0[10:53:56] /v/nv LINUX $ ./v -cc clang-7 -prod run /v/misc/jobs_execution_1.v
Before:  data[at start]:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Before:  data[at   end]:[999990, 999991, 999992, 999993, 999994, 999995, 999996, 999997, 999998, 999999]
After :  data[at start]:[0, 100, 2, 0, 400, 5, 0, 700, 8, 0]
After :  data[at   end]:[0, 99999100, 999992, 0, 99999400, 999995, 0, 99999700, 999998, 0]
Execution took: 5ms
0[10:53:59] /v/nv LINUX $ ./v -cc gcc-9 -prod run /v/misc/jobs_execution_1.v
Before:  data[at start]:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Before:  data[at   end]:[999990, 999991, 999992, 999993, 999994, 999995, 999996, 999997, 999998, 999999]
After :  data[at start]:[0, 100, 2, 0, 400, 5, 0, 700, 8, 0]
After :  data[at   end]:[0, 99999100, 999992, 0, 99999400, 999995, 0, 99999700, 999998, 0]
Execution took: 8ms
0[10:54:08] /v/nv LINUX $
0[10:54:10] /v/nv LINUX $
0[10:54:10] /v/nv LINUX $ ./v -cc clang-7 run /v/misc/jobs_execution_1.v
Before:  data[at start]:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Before:  data[at   end]:[999990, 999991, 999992, 999993, 999994, 999995, 999996, 999997, 999998, 999999]
After :  data[at start]:[0, 100, 2, 0, 400, 5, 0, 700, 8, 0]
After :  data[at   end]:[0, 99999100, 999992, 0, 99999400, 999995, 0, 99999700, 999998, 0]
Execution took: 17ms
0[10:54:14] /v/nv LINUX $ ./v -cc gcc-9 run /v/misc/jobs_execution_1.v
Before:  data[at start]:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Before:  data[at   end]:[999990, 999991, 999992, 999993, 999994, 999995, 999996, 999997, 999998, 999999]
After :  data[at start]:[0, 100, 2, 0, 400, 5, 0, 700, 8, 0]
After :  data[at   end]:[0, 99999100, 999992, 0, 99999400, 999995, 0, 99999700, 999998, 0]
Execution took: 22ms
0[10:54:19] /v/nv LINUX $

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment