Skip to content

Commit ab9a2c2

Browse files
Added concurrency to run multiple benchmarks at once
1 parent 5b514fa commit ab9a2c2

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

MyCode/benchmark/main.go

+30-14
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ var input = `
3333
fibonacci(35);
3434
`
3535

36+
type benchResults struct {
37+
engine string
38+
result object.Object
39+
duration time.Duration
40+
}
41+
3642
func main() {
3743
flag.Parse()
3844

@@ -54,17 +60,29 @@ func main() {
5460
} else if *engine == "eval" {
5561
timeEval(program)
5662
} else {
57-
timeEval(program)
58-
timeVM(program)
63+
results := make(chan benchResults)
64+
go func() {
65+
fmt.Println("Running eval")
66+
result := timeEval(program)
67+
results <- result
68+
}()
69+
go func() {
70+
fmt.Println("Running vm")
71+
result := timeVM(program)
72+
results <- result
73+
}()
74+
75+
printResult(<-results)
76+
printResult(<-results)
5977
}
6078
}
6179

62-
func timeVM(program *ast.Program) {
80+
func timeVM(program *ast.Program) benchResults {
6381
comp := compiler.New()
6482
err := comp.Compile(program)
6583
if err != nil {
6684
fmt.Printf("compiler error: %s", err)
67-
return
85+
return benchResults{}
6886
}
6987

7088
machine := vm.New(comp.Bytecode())
@@ -74,27 +92,25 @@ func timeVM(program *ast.Program) {
7492
err = machine.Run()
7593
if err != nil {
7694
fmt.Printf("vm error: %s", err)
77-
return
95+
return benchResults{}
7896
}
7997

8098
duration := time.Since(start)
8199
result := machine.LastPoppedStackElem()
82-
83-
printResult("vm", result, duration)
100+
return benchResults{engine: "vm", result: result, duration: duration}
84101
}
85102

86-
func timeEval(program *ast.Program) {
103+
func timeEval(program *ast.Program) benchResults {
87104
env := object.NewEnvironment()
88105
start := time.Now()
89106
result := evaluator.Eval(program, env)
90107
duration := time.Since(start)
91-
92-
printResult("eval", result, duration)
108+
return benchResults{engine: "eval", result: result, duration: duration}
93109
}
94110

95-
func printResult(engine string, result object.Object, duration time.Duration) {
111+
func printResult(result benchResults) {
96112
fmt.Printf("--> engine=%s, result=%s, duration=%s\n",
97-
engine,
98-
result.Inspect(),
99-
duration)
113+
result.engine,
114+
result.result.Inspect(),
115+
result.duration)
100116
}

MyCode/build/benchmark.exe

5 KB
Binary file not shown.

0 commit comments

Comments
 (0)