golang chan 发送接收测试数据

测试代码:

package main

import (
    "fmt"
    "time"
)

const (
    num = 10000000  // 测试1千万次发送和接收
)

func main() {
    TestChan2()
}

func TestChan2() {
    st := time.Now().UnixNano()

    c := make(chan int)

    go func() {
        var n int
        for n = range c {
        }
        fmt.Printf("task TestChan2 cost %d \r\n", (time.Now().UnixNano()-st)/int64(time.Millisecond))
        fmt.Printf("%d", n)

    }()

    for i := 0; i < num; i++ {
        c <- i
    }
    close(c) // 发送完就关闭通道, 接手协程中就会 退出 for range 循环

    // sleep 一段时间,确保接收chan完成
    time.Sleep(3 * time.Second)

}

执行结果:

在一台win7笔记本上测试数据如下:

2.7到2.9秒执行完发送和接收。

 

在一台docker虚机上测试的数据如下:

4.9秒到5.2秒完成

在一台 linux 物理机上执行结果

在 3.5-4.1 秒完成

 

 

chan的一些小技巧请看:

http://my.oschina.net/goskyblue/blog/191149

时间: 2024-10-05 10:06:29

golang chan 发送接收测试数据的相关文章

一篇文章贯穿ACE各种发送接收组件

通信过程 首先介绍一下socket通信的基本过程:这里先假设有两个家伙在通信,一个是S,另一个叫C (1)S打开端口监听本地的端口看看有没有人来连接: (2)与此同时C试图去连接远程的S,连接的地址就是S的地址加上S监听的端口号: (3)S收到C的请求之后,建立连接,双方共同持有连接的通道,可互相发送/接收数据任意次,此时S和C无区别: (4)其中一方断开连接,或者因为网络原因中断连接,另一方也会关闭: (5)此时通信过程结束: 整个过程如下图所示 普通的ACE通信类完成上面的通信过程: Tim

短信发送接收装置

接到Boss的命令,要求我们做一个在Android手机上运行的小的例子,实现的功能是:通过一个手机向另外一个手机发送数据,另外一个Android手机接收到后通过USB接口输出! 该装置主要由三个步骤组成: 1.发信息 2.接收信息并读取信息内容 3.从 USB 口输出(这里暂时没实现) 就是为了实现一个短信发送,并接收短信内容输出的装置 MainActivity.java 类实现的是发送信息的功能 1 package com.example.android_phone; 2 3 import j

转:TCP/IP详解--举例明白发送/接收缓冲区、滑动窗口协议之间的关系

原文地址:http://blog.csdn.net/yusiguyuan/article/details/21439633#1536434-tsina-1-74921-66a1f5d8f89e9ad52626f6f40fdeadaa  TCP/IP详解--举例明白发送/接收缓冲区.滑动窗口协议之间的关系. 一个例子明白发送缓冲区.接受缓冲区.滑动窗口协议之间的关系. 在上面的几篇文章中简单介绍了上述几个概念在TCP网络编程中的关系,也对应了几个基本socket系统调用的几个行为,这里再列举一个例

TCP带外数据学习总结(概念,发送接收过程,数据到达检测,代码实现)

最近在学习<Linux高性能服务器编程> 这本书,书中零零散散的讲了TCP带外数据的一些知识,在这里把这些知识总结以下,方便自己,也方便他人. 本文主要分为以下四个方面总结,分别为 TCP带外数据的概念,如何发送和接收带外数据,怎么检测带外数据的到达,最后介绍相关函数以及代码实现. 第一部分: TCP带外数据的概念 有很多传输层此协议都具有带外数据(OUT Of Band) 的概念,其作用是迅速通告通信的另一方本段发生的重要事件.带外数据具有比普通数据更高的优先级,理论上应该被立即发送和立即接

[NIO]用dawn发送接收HTTP请求

HTTP协议的下层使用的是tcp,所以我们建立一个tcp连接就能发送接收http请求.dawn底层使用了nio,但是经过dawn的封装之后,我们在编写代码的时候,就和使用普通的阻塞式socket一样 ,不需要关注nio的api.可以把我们的精力放在业务逻辑的处理上.举例如下,下例的功能就是取回baidu首页: package zhmt.dawn.nio; import java.nio.charset.Charset; import zhmt.dawn.nio.buffer.ScalableDi

TCP发送接收数据(一)

TCP发送接收数据 import java.io.IOException; import java.io.OutputStream; import java.net.Socket; /* * TCP协议发送数据: * A:创建发送端的Socket对象 *    这一步如果成功,就说明连接已经建立成功了. * B:获取输出流,写数据 * C:释放资源 * * 连接被拒绝.TCP协议一定要先看服务器. * java.net.ConnectException: Connectionrefused: c

从缓冲上看阻塞与非阻塞socket在发送接收上的区别

最近在网络上看到一些帖子以及回复,同时又搜索了一些网络上关于阻塞非阻塞区别的描述,发现很多人在描述两者的发送接收时操作返回以及缓冲区处理的区别时有不同程度的误解.所以我想写一篇文章来纠正错误,并作为记录方便查阅,如有转载,注明作者(jwybobo2007)以及出处即可. 首先socket在默认情况下是阻塞状态的(未指异步操作以及其它一些特殊用途下,直接默认为非阻塞),这就使得发送以及接收操作处于阻塞的状态,即调用不会立即返回,而是进入睡眠等待操作完成.下面把讨论点分为发送以及接收.  一.发送选

C# ---串口发送接收数据实例

硬件设备: pH/ORP 电导率/TDS/盐度 溶解氧 2000/3000/5000/5500 变送器/控制器 设定: P-08:RS-485输出设定 P-11:485传输设定 设定这俩种的ID号 根据ID,对串口发送请求:接收串口返回的数据. C# ---串口发送接收数据实例

PHP-Socket服务端客户端发送接收通信实例详解

Socket介绍 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务. Socket连接过程 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认.