Created
December 27, 2017 07:00
-
-
Save dmiyakawa/79a518cf8780c158673017e0b5e5855d to your computer and use it in GitHub Desktop.
Proof of Work? with Goroutine
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"crypto/sha256" | |
"fmt" | |
"math/rand" | |
"time" | |
"runtime" | |
) | |
func do_pow(dat []byte) (sum [32]byte) { | |
token := make([]byte, 8) | |
for { | |
rand.Read(token) | |
c := append(dat, token...) | |
sum = sha256.Sum256(c) | |
if sum[0] == 0 && sum[1] == 0 && sum[2] == 0 { | |
return | |
} | |
} | |
} | |
func main() { | |
fmt.Printf("numcpu: %d\n", runtime.NumCPU()) | |
runtime.GOMAXPROCS(runtime.NumCPU()) | |
start := time.Now(); | |
out := make(chan []byte, 10) | |
in := make(chan [32]byte, 10) | |
for i := 0; i < runtime.NumCPU(); i++ { | |
go func(in <- chan []byte, out chan<- [32]byte) { | |
for { | |
dat, ok := <-in | |
if !ok { | |
break | |
} | |
out <- do_pow(dat) | |
} | |
}(out, in) | |
} | |
for i := 0; i < 10; i++ { | |
out <- []byte("hello world " + string(i)) | |
} | |
close(out) | |
for i := 0; i < 10; i++ { | |
ret, ok := <-in | |
if !ok { | |
fmt.Println("Error happened") | |
break | |
} | |
fmt.Printf("%x\n", ret) | |
} | |
close(in) | |
end := time.Now() | |
fmt.Printf("%f sec\n",(end.Sub(start)).Seconds()) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"crypto/sha256" | |
"fmt" | |
"math/rand" | |
"time" | |
) | |
func do_pow(dat []byte) (sum [32]byte) { | |
token := make([]byte, 8) | |
for { | |
rand.Read(token) | |
c := append(dat, token...) | |
sum = sha256.Sum256(c) | |
if sum[0] == 0 && sum[1] == 0 && sum[2] == 0 { | |
return | |
} | |
} | |
} | |
func main() { | |
start := time.Now(); | |
for i := 0; i < 10; i++ { | |
dat := do_pow([]byte("hello world " + string(i))) | |
fmt.Printf("%x\n", dat) | |
} | |
end := time.Now() | |
fmt.Printf("%f sec\n",(end.Sub(start)).Seconds()) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ system_profiler -detailLevel mini SPHardwareDataType | |
Hardware: | |
Hardware Overview: | |
Model Name: iMac | |
Model Identifier: iMac15,1 | |
Processor Name: Intel Core i5 | |
Processor Speed: 3.5 GHz | |
Number of Processors: 1 | |
Total Number of Cores: 4 | |
L2 Cache (per Core): 256 KB | |
L3 Cache: 6 MB | |
Memory: 32 GB | |
Boot ROM Version: IM151.0211.B00 | |
SMC Version (system): 2.23f11 | |
$ go version | |
go version go1.9.2 darwin/amd64 | |
$ go run proof_of_work_serial.go | |
0000009129b79628db72ad9adb63571fd4384067c45d81a9f1f37bbda7317340 | |
00000002d5d0b757ee53617a81f8539ae0539eeae18c3c060be7d48289d60988 | |
0000008f3ec99acf77fa84a06401600ee173812a7c6d0641f305d50077bd8a19 | |
000000caf90c867b575d1eaa3d22b0264c04021f610bdcfec04fd3e419851a94 | |
000000d373ae16e798689e8a687b6f0c1938aef263096b3a90b8c41322b46890 | |
0000004d1989bdd6a4cceee1572f85b1e7d64d3e5c82a13e4ad7f90a1b896440 | |
000000e325c061d5d54af40793466fa8c630bca4dd22b8e3758ec2183d1e8a4b | |
000000015fe4e83da65ed075b21512108c11e7abb6f6c7e6d5307d794ab9a11e | |
000000366f0530f4e32bce18aca12fe359909d02bd0924bc0724f2a8a088a682 | |
000000d00962365a274de6d2c9ef557d00673a4f88ebe5519acbb09fe9284c1b | |
87.588653 sec | |
$ go run proof_of_work_parallel.go | |
numcpu: 4 | |
0000002bf1a6c1079b9d624f55258ac4e7310bf5c713b26f6b1f92c34919ce1a | |
000000661481fddccf8601e418dedb62ed4637f287b3f73e0aacb42c88a681c3 | |
0000001b70d9ea7dce6ace63d05c4d6d91a67056018806492a898de1aa69d08f | |
0000007c32d1b8e9042aacb4f847a6b6b5d796730fd279d2eb57b17062f2099b | |
000000180a8d92b922ed25478ea3b53ad18113fe862f57ac470ed02b1287e0fa | |
000000c3567f3725bc5d3be1184bf827cbe0417e25be8f572019bff8783d4d3f | |
000000225700318044ee1b8d3ea518bb752fd51e30e419a171cf70ba76954025 | |
000000c4319647477a58d00a6f7775231b676d0a33c9c5e1fa2c5237719c8c0a | |
000000621fd243573043b6a8d85b14e5d24f163094702b428d6d0ec3d5a35616 | |
000000d274491e2b2f586e797600b5fd5d24c11f9751579b5cd816bbf663e8b4 | |
23.308537 sec |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment