美文网首页
go的并发时钟

go的并发时钟

作者: 蛐蛐儿阳 | 来源:发表于2020-05-03 10:15 被阅读0次

笔记是为了多敲一遍代码,加深理解。直接上代码 A

package main

import (
    "io"
    "log"
    "net"
    "time"
)

func main()  {
    listener, err := net.Listen("tcp", "localhost:8000")
    if err != nil {
        log.Fatal(err)
    }

    for  {
        conn, err := listener.Accept()
        if err != nil {
            log.Print(err)
            continue
        }
        handleConn(conn)
    }
}

func handleConn(c net.Conn)  {
    defer c.Close()
    for  {
        _, err := io.WriteString(c, time.Now().Format("15:04:05 \n"))
        if err != nil {
            return
        }
        time.Sleep(1 * time.Second)
    }
}

时间函数的一些知识

fmt.Println(time.Now().Unix())
# 1389058332
这个比较亲切

fmt.Println(time.Now().Format("2006-01-02 15:04:05")) 
# 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5
# 2014-01-07 09:42:20

然后
net.Listen 监听可访问接口, 发送数据
net.Dial dial是拨号的意思, 接收数据
看下接收代码 B

package main

import (
    "io"
    "log"
    "net"
    "os"
)

func main()  {
    conn, err := net.Dial("tcp", "localhost:8000")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()
    mustCopy(os.Stdout, conn)
}

func mustCopy(dst io.Writer, src io.Reader) {
    if _, err := io.Copy(dst, src); err != nil {
        log.Fatal(err)
    }
}

意思是A先开启,在开启B, B会接收到时间,每秒一条不断打印。但开启多个B, 只有第一个b能接收到信息, 其他等待。 当第一个B挂掉,第二个开始接收信息,以此类推。即只能有一个,非并发。
服务器支持并发是理所当然的,我们现在看看怎么搞。
在消息发送端, handleConn 函数前添加 go 即可。

就不再贴代码了,这里每一个连接使用一个 go。
下一pa

相关文章

  • go的并发时钟

    笔记是为了多敲一遍代码,加深理解。直接上代码 A 时间函数的一些知识 然后net.Listen 监听可访问接口,...

  • Go语言并发

    Go语言并发 Go语言级别支持协程,叫做goroutine Go 语言从语言层面支持并发和并行的开发操作 Go并发...

  • Go基础语法(九)

    Go语言并发 Go 是并发式语言,而不是并行式语言。 并发是指立即处理多个任务的能力。 Go 编程语言原生支持并发...

  • Go并发模型:并发协程chan的优雅退出

    Go并发模型:并发协程chan的优雅退出 go chan的使用

  • GO语言初级学习之代码案例13 (QQ群聊)

    @(go语言 黑马)[GO语言] 并发聊天室 题目:利用Go语言高并发的特性,编写一个类似QQ群聊功能的并发聊天服...

  • Go并发

    并发和并行 Go是并发语言,而不是并行语言。(Go is a concurrent language and no...

  • day08-go.GPM

    当别人到go为什么支持高并发,或者问为什么go本身对并发编程友好?以及go与Java对比的并发对比 正确回答: 在...

  • 第14章-并发性Concurrency

    并发性Concurrency 1.1 什么是并发 Go是并发语言,而不是并行语言。在讨论如何在Go中进行并发处理之...

  • Golang(十四) 并发性Concurrency

    并发性Concurrency 1.1 什么是并发 Go是并发语言,而不是并行语言。在讨论如何在Go中进行并发处理之...

  • Go 并发原理

    Go语言是为并发而生的语言,Go语言是为数不多的在语言层面实现并发的语言;也正是Go语言的并发特性,吸引了全球无数...

网友评论

      本文标题:go的并发时钟

      本文链接:https://www.haomeiwen.com/subject/klmrghtx.html