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
+		}
+	}
+}