|
|
@@ -22,7 +22,7 @@ func TestReaderAndWrite(t *testing.T) {
|
|
|
readerBuffer := bytes.NewReader(buffer)
|
|
|
writerBuffer := bytes.NewBuffer(make([]byte, 0, size))
|
|
|
|
|
|
- transportChan := make(chan []byte, size/bufferSize*10)
|
|
|
+ transportChan := make(chan []byte, 1024)
|
|
|
|
|
|
err = ReaderToChan(transportChan, readerBuffer)
|
|
|
assert.Error(err).Equals(io.EOF)
|
|
|
@@ -52,43 +52,96 @@ func (reader *StaticReader) Read(b []byte) (size int, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func BenchmarkTransport(b *testing.B) {
|
|
|
- size := 1024 * 1024
|
|
|
+func BenchmarkTransport1K(b *testing.B) {
|
|
|
+ size := 1 * 1024
|
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
- transportChanA := make(chan []byte, 128)
|
|
|
- transportChanB := make(chan []byte, 128)
|
|
|
+ runBenchmarkTransport(size)
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
- readerA := &StaticReader{size, 0}
|
|
|
- readerB := &StaticReader{size, 0}
|
|
|
+func BenchmarkTransport2K(b *testing.B) {
|
|
|
+ size := 2 * 1024
|
|
|
|
|
|
- writerA := ioutil.Discard
|
|
|
- writerB := ioutil.Discard
|
|
|
+ for i := 0; i < b.N; i++ {
|
|
|
+ runBenchmarkTransport(size)
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
- finishA := make(chan bool)
|
|
|
- finishB := make(chan bool)
|
|
|
+func BenchmarkTransport4K(b *testing.B) {
|
|
|
+ size := 4 * 1024
|
|
|
|
|
|
- go func() {
|
|
|
- ChanToWriter(writerA, transportChanA)
|
|
|
- close(finishA)
|
|
|
- }()
|
|
|
+ for i := 0; i < b.N; i++ {
|
|
|
+ runBenchmarkTransport(size)
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
- go func() {
|
|
|
- ReaderToChan(transportChanA, readerA)
|
|
|
- close(transportChanA)
|
|
|
- }()
|
|
|
+func BenchmarkTransport10K(b *testing.B) {
|
|
|
+ size := 10 * 1024
|
|
|
|
|
|
- go func() {
|
|
|
- ChanToWriter(writerB, transportChanB)
|
|
|
- close(finishB)
|
|
|
- }()
|
|
|
+ for i := 0; i < b.N; i++ {
|
|
|
+ runBenchmarkTransport(size)
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
- go func() {
|
|
|
- ReaderToChan(transportChanB, readerB)
|
|
|
- close(transportChanB)
|
|
|
- }()
|
|
|
+func BenchmarkTransport100K(b *testing.B) {
|
|
|
+ size := 100 * 1024
|
|
|
|
|
|
- <-transportChanA
|
|
|
- <-transportChanB
|
|
|
+ for i := 0; i < b.N; i++ {
|
|
|
+ runBenchmarkTransport(size)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func BenchmarkTransport1M(b *testing.B) {
|
|
|
+ size := 1024 * 1024
|
|
|
+
|
|
|
+ for i := 0; i < b.N; i++ {
|
|
|
+ runBenchmarkTransport(size)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func BenchmarkTransport10M(b *testing.B) {
|
|
|
+ size := 10 * 1024 * 1024
|
|
|
+
|
|
|
+ for i := 0; i < b.N; i++ {
|
|
|
+ runBenchmarkTransport(size)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func runBenchmarkTransport(size int) {
|
|
|
+
|
|
|
+ transportChanA := make(chan []byte, 128)
|
|
|
+ transportChanB := make(chan []byte, 128)
|
|
|
+
|
|
|
+ readerA := &StaticReader{size, 0}
|
|
|
+ readerB := &StaticReader{size, 0}
|
|
|
+
|
|
|
+ writerA := ioutil.Discard
|
|
|
+ writerB := ioutil.Discard
|
|
|
+
|
|
|
+ finishA := make(chan bool)
|
|
|
+ finishB := make(chan bool)
|
|
|
+
|
|
|
+ go func() {
|
|
|
+ ChanToWriter(writerA, transportChanA)
|
|
|
+ close(finishA)
|
|
|
+ }()
|
|
|
+
|
|
|
+ go func() {
|
|
|
+ ReaderToChan(transportChanA, readerA)
|
|
|
+ close(transportChanA)
|
|
|
+ }()
|
|
|
+
|
|
|
+ go func() {
|
|
|
+ ChanToWriter(writerB, transportChanB)
|
|
|
+ close(finishB)
|
|
|
+ }()
|
|
|
+
|
|
|
+ go func() {
|
|
|
+ ReaderToChan(transportChanB, readerB)
|
|
|
+ close(transportChanB)
|
|
|
+ }()
|
|
|
+
|
|
|
+ <-transportChanA
|
|
|
+ <-transportChanB
|
|
|
+}
|