Added benchmarks to test blocking vs non-blocking channels.
diff --git a/benchmarks/blocking_channel_test.go b/benchmarks/blocking_channel_test.go
new file mode 100644
index 0000000..f7097c6
--- /dev/null
+++ b/benchmarks/blocking_channel_test.go
@@ -0,0 +1,20 @@
+package benchmarks
+
+import "testing"
+
+const blockingChannelBufferSize = 1024 * 1024
+
+func BenchmarkBlockingChannel(b *testing.B) {
+ iterations := int64(b.N)
+
+ channel := make(chan int64, blockingChannelBufferSize)
+ go func() {
+ for i := int64(0); i < iterations; i++ {
+ channel <- i
+ }
+ }()
+
+ for i := int64(0); i < iterations; i++ {
+ <-channel
+ }
+}
diff --git a/benchmarks/non_blocking_channel_test.go b/benchmarks/non_blocking_channel_test.go
new file mode 100644
index 0000000..2fab6ee
--- /dev/null
+++ b/benchmarks/non_blocking_channel_test.go
@@ -0,0 +1,30 @@
+package benchmarks
+
+import "testing"
+
+const nonBlockingChannelBufferSize = 1024 * 1024
+
+func BenchmarkNonBlockingChannel(b *testing.B) {
+ iterations := int64(b.N)
+
+ channel := make(chan int64, nonBlockingChannelBufferSize)
+ go func() {
+ for i := int64(0); i < iterations; {
+ select {
+ case channel <- i:
+ i++
+ default:
+ continue
+ }
+ }
+ }()
+
+ for i := int64(0); i < iterations; i++ {
+ select {
+ case <-channel:
+ i++
+ default:
+ continue
+ }
+ }
+}