All Projects → uberswe → go-plugin-benchmark

uberswe / go-plugin-benchmark

Licence: MIT License
Benchmark comparing the go plugin package to other plugin implementations

Programming Languages

go
31211 projects - #10 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to go-plugin-benchmark

benchmark
Parse Server Continuous Benchmark
Stars: ✭ 21 (+16.67%)
Mutual labels:  benchmark
krun
High fidelity benchmark runner
Stars: ✭ 70 (+288.89%)
Mutual labels:  benchmark
Unchase.FluentPerformanceMeter
🔨 Make the exact performance measurements of the public methods for public classes using this NuGet Package with fluent interface. Requires .Net Standard 2.0+. It is an Open Source project under Apache-2.0 License.
Stars: ✭ 33 (+83.33%)
Mutual labels:  benchmark
HeCBench
software.intel.com/content/www/us/en/develop/articles/repo-evaluating-performance-productivity-oneapi.html
Stars: ✭ 85 (+372.22%)
Mutual labels:  benchmark
RGBD-SODsurvey
RGB-D Salient Object Detection: A Survey
Stars: ✭ 171 (+850%)
Mutual labels:  benchmark
npm-yarn-benchmark
Bash script for comparing NPM and Yarn performance
Stars: ✭ 42 (+133.33%)
Mutual labels:  benchmark
stringbench
String matching algorithm benchmark
Stars: ✭ 31 (+72.22%)
Mutual labels:  benchmark
inspec-gke-cis-benchmark
GKE CIS 1.1.0 Benchmark InSpec Profile
Stars: ✭ 27 (+50%)
Mutual labels:  benchmark
latenz
JavaScript HTTP latency analyzer
Stars: ✭ 18 (+0%)
Mutual labels:  benchmark
c2clat
A tool to measure CPU core to core latency
Stars: ✭ 37 (+105.56%)
Mutual labels:  benchmark
SciMLBenchmarks.jl
Benchmarks for scientific machine learning (SciML) software and differential equation solvers
Stars: ✭ 195 (+983.33%)
Mutual labels:  benchmark
CARLA
CARLA: A Python Library to Benchmark Algorithmic Recourse and Counterfactual Explanation Algorithms
Stars: ✭ 166 (+822.22%)
Mutual labels:  benchmark
http bench
golang HTTP stress test tool, support single and distributed
Stars: ✭ 142 (+688.89%)
Mutual labels:  benchmark
hashcatbenchmark
Benchmark in Hashcat for diferents GPU's
Stars: ✭ 19 (+5.56%)
Mutual labels:  benchmark
serializer-benchmark
A PHP benchmark application to compare PHP serializer libraries
Stars: ✭ 14 (-22.22%)
Mutual labels:  benchmark
go-perftuner
Helper tool for manual Go code optimization.
Stars: ✭ 111 (+516.67%)
Mutual labels:  benchmark
rop-benchmark
ROP Benchmark is a tool to compare ROP compilers
Stars: ✭ 23 (+27.78%)
Mutual labels:  benchmark
jmeter-grpc-plugin
A JMeter plugin supports load test gRPC
Stars: ✭ 36 (+100%)
Mutual labels:  benchmark
minhash-lsh
Minhash LSH in Golang
Stars: ✭ 20 (+11.11%)
Mutual labels:  benchmark
elixir port benchmarks
Quick-and-dirty benchmarks for using Ports to communicate with various languages.
Stars: ✭ 24 (+33.33%)
Mutual labels:  benchmark

Golang Plugin Benchmark

A comparison of the go plugin package and other plugin implementations for golang. The reason for this is to evaluate plugin options for Beubo which is a CMS written in go. As shown in a previous benchmark there is basically no difference in performance of using go plugins to running a function directly in code.

The following packages have been benchmarked.

Several of the other packages use RPC or similar methods instead of the go plugin package which gets around issues such as, but not limited to, not being compatible with Windows and package paths and GOPATH needing to be the same between apps and plugins.

With the addition of Yaegi, I am also benchmarking interpreters.

Do you know any other plugin packages? Please open an issue or pull request.

Found an issue with a benchmark? Please open an issue or pull request.

Results

Most plugins tested are using RPC which adds about 30 - 50 microseconds to plugin calls (or 0.03 - 0.05 milliseconds) over the golang plugin package.

Benchmarks

Name Operations ns/op
go plugin package 87296470 13.50 ns/op
hashicorp/go-plugin 26695 44913 ns/op
natefinch/pie 32142 37148 ns/op
dullgiulio/pingo over tcp 21369 56459 ns/op
dullgiulio/pingo over unix 30313 38929 ns/op
elliotmr/plug 100197 12196 ns/op
traefik/yaegi 1447602 898.2 ns/op

Last run on January 15th, 2022 with Go version 1.17.6. Benchmark performed on a MacBook Pro (15-inch, 2018) with a 2,9 GHz 6-Core Intel Core i9 processor and 32 GB 2400 MHz DDR4 ram.

% bash ./run.sh
goos: darwin
goarch: amd64
pkg: github.com/uberswe/go-plugin-benchmark
cpu: Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz
BenchmarkPluginRandInt/golang-plugin-12         87296470                13.50 ns/op
BenchmarkHashicorpGoPluginRandInt/hashicorp-go-plugin-12                   26695             44913 ns/op
BenchmarkPieRandInt/pie-12                                                 32142             37148 ns/op
BenchmarkPingoTcpRandInt/pingo-tcp-12                                      21369             56459 ns/op
BenchmarkPingoTcpRandInt/pingo-unix-12                                     30313             38929 ns/op
BenchmarkPlugRandInt/plug-12                                              100197             12196 ns/op
BenchmarkYaegiRandInt/yaegi-12                                           1447602               898.2 ns/op
PASS
ok      github.com/uberswe/go-plugin-benchmark  12.279s

Contributing

If you have a plugin or interpreter written in go which you would like to benchmark feel free to open an issue.

Would you like to add more benchmarks? Please feel free to fork this repository and open a pull request with the updated changes. Please make sure to add any needed code and also update the Readme. Your code belongs to you but it must fall under the same LICENSE as this repository to be included.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].