-
Notifications
You must be signed in to change notification settings - Fork 2
/
benchmark_test.go
101 lines (85 loc) · 1.91 KB
/
benchmark_test.go
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package bidirpc
import (
"net"
"net/rpc"
"testing"
)
type IntArgs struct {
V int32
}
type IntReply struct {
V int32
}
type StringArgs struct {
Str string
}
type StringReply struct {
Str string
}
type BenchService struct{}
func (s *BenchService) EchoInt(args IntArgs, reply *IntReply) error {
reply.V = args.V
return nil
}
func (s *BenchService) EchoString(args StringArgs, reply *StringReply) error {
reply.Str = args.Str
return nil
}
var (
sessionYin *Session
sessionYang *Session
registryYin *Registry
registryYang *Registry
client *rpc.Client
server *rpc.Server
)
func init() {
service := &BenchService{}
connYin, connYang := net.Pipe()
registryYin = NewRegistry()
registryYin.Register(service)
registryYang = NewRegistry()
sessionYin, _ = NewSession(connYin, Yin, registryYin, 0)
sessionYang, _ = NewSession(connYang, Yang, registryYang, 0)
go func() {
_ = sessionYin.Serve()
}()
go func() {
_ = sessionYang.Serve()
}()
connServer, connClient := net.Pipe()
client = rpc.NewClient(connClient)
server = rpc.NewServer()
server.Register(service)
go server.ServeConn(connServer)
}
func BenchmarkEchoInt(b *testing.B) {
args := IntArgs{}
reply := new(IntReply)
for i := 0; i < b.N; i++ {
args.V = int32(i)
sessionYang.Call("BenchService.EchoInt", args, reply)
}
}
func BenchmarkBuiltinEchoInt(b *testing.B) {
args := IntArgs{}
reply := new(IntReply)
for i := 0; i < b.N; i++ {
args.V = int32(i)
client.Call("BenchService.EchoInt", args, reply)
}
}
func BenchmarkEchoString(b *testing.B) {
args := StringArgs{"abcdefghijklmnopqrstuvwxyz"}
reply := new(StringReply)
for i := 0; i < b.N; i++ {
sessionYang.Call("BenchService.EchoString", args, reply)
}
}
func BenchmarkBuiltinEchoString(b *testing.B) {
args := StringArgs{"abcdefghijklmnopqrstuvwxyz"}
reply := new(StringReply)
for i := 0; i < b.N; i++ {
client.Call("BenchService.EchoString", args, reply)
}
}