Skip to content

Instantly share code, notes, and snippets.

@ehfeng
Created September 23, 2019 03:21
Show Gist options
  • Save ehfeng/b6276e3f9e20905956fd8732c634e3be to your computer and use it in GitHub Desktop.
Save ehfeng/b6276e3f9e20905956fd8732c634e3be to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"time"
"github.com/ry/v8worker2"
)
var script string = `
function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint8Array(buf));
}
function calculatePrimes(iterations, multiplier) {
var primes = [];
for (var i = 0; i < iterations; i++) {
var candidate = i * (multiplier * Math.random());
var isPrime = true;
for (var c = 2; c <= Math.sqrt(candidate); ++c) {
if (candidate % c === 0) {
// not prime
isPrime = false;
break;
}
}
if (isPrime) {
primes.push(candidate);
}
}
return primes;
}
V8Worker2.recv(function(msg) {
// calculatePrimes(10, 10000)
V8Worker2.print("JS print", ab2str(msg))
V8Worker2.send(msg)
});
`
var start time.Time
func print(msg []byte) []byte {
fmt.Println("Go callback: ", string(msg))
elapsed := time.Since(start)
fmt.Println("Elapsed time:", elapsed)
start = time.Now()
return msg
}
func main() {
worker := v8worker2.New(print)
start = time.Now()
if err := worker.Load("main.js", script); err != nil {
panic(err)
}
for i := range make([]int, 5) {
if err := worker.SendBytes([]byte(fmt.Sprintf("Run %d", i))); err != nil {
panic(err)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment