摘要:
示例:Telnet 回音服务器——TCP服务器的基本结构 本节使用 Go 语言中的 Socket、goroutine 和通道编写一个简单的 Telnet 协议的回音服务器。 回音服务器的代码分成4个部分,分别是接受连接、会话处理、Telnet 命令处理和程序入口。 1、接受连接 Go 语言中可以根据 阅读全文
摘要:
centos8.0 使用kubeadm部署 k8s-v1.18.20+etcd-v3.4.3+flannel-v0.10.0 高可用集群 一、资源规划: 主机名 IP地址 配置 角色 系统版本 k8s-master01 10.100.12.168 2C2G master/Work/etcd cent 阅读全文
摘要:
关闭通道后继续使用通道 通道是一个引用对象,和 map 类似。map 在没有任何外部引用时 ,Go 程序在运行(runtime)会自动对内存进行垃圾回收(Garbage Collection,GC)。类似的,通道也可以被垃圾回收,但是通道也可以被主动关闭的。 1、格式 使用 close() 来关闭一 阅读全文
摘要:
示例:使用通道响应计时器的事件 Go语言中的 time 包提供了计时器的封装。 由于 Go 语言中的通道和 goroutine 的设计,定时任务可以在 goroutine 中通过同步的方式完成,也可以通过 goroutine 中异步回调完成。 1、一段时间之后(time.After) package 阅读全文
摘要:
示例:模拟远程过程调用(RPC) 服务器开发中会使用 RPC(Remote Procedure Call,远程过程调用)简化进程间通信的过程。RPC 能有效低封装通信过程,让远程的数据收发通信过程看起来就像本地的函数调用一样。 本例中,使用通道替代 Socket 实现 RPC 的过程。客户端与服务器 阅读全文
摘要:
通道的多路复用——同时处理接收和发送多个通道的数据 多路复用是通信和网络中的一个专业术语。多路复用通常表示一个信道上传输多路信号和数据流的过程和技术。 在使用通道时,想同时接收多个通道的数据是一件困难的事情。通道在接收数据时,如果没有数据可以接收将会发生阻塞。虽然可以使用如下模式进行遍历,但运行性能 阅读全文
摘要:
带缓冲的通道 在无缓冲通道的基础上,为通道增加一个有限大小的存储空间形成带缓冲通道。 带缓冲通道在发送时无需等待接收方接收即可完成发送过程,并且不会发生阻塞,只有当存储空间满时,才会发生阻塞。 带缓冲通道有数据时,接收方将不会发生阻塞,直到通道中没有数据可读时,通道将会再读阻塞。 1、创建带缓冲通道 阅读全文
摘要:
单向通道——通道中的单行道 Go 的通道可以在声明时约束其操作方向,如只发送或是只接收。这种约束方向的通道被称为单向通道。 1、单向通道的声明格式 var 通道实例 chan<- 元素类型 // 只能发送通道 var 通道实例 <-chan 元素类型 // 只能接收通道 元素类型:通道包含的元素类型 阅读全文
摘要:
并发打印 使用无缓冲通道往里面装入数据时,装入方将被阻塞,直到另外通道在另外一个 goroutine 中被取出。同样,如果通道中没有放入任何数据,接收方试图从通道中获取数据时,同样被阻塞。发送和接收的操作是同步完成的。 package main import "fmt" func printer(c 阅读全文
摘要:
在多个 goroutine 间通信的管道——通道(Channel) 单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。 虽然可以使用共享内存进行数据交换,但是共享内存在不同的 goroutine 中容易发生竟态问题。为了保证数据交换的正确性,必须使用互斥量对内存进 阅读全文
摘要:
调整并发的运行性能(GOMAXPROCS) 在 Go 运行时(runtime)实现了一个小型的任务调度器。这套调度器的工作原理类似操作系统调度线程,Go 程序调度器可以高效地将 CPU 资源分配给每一个任务。传统逻辑中,开发者需要维护 线程池中线程 与 CPU 核心数量的对应关系。同样的,Go 中也 阅读全文