如何设计一个接口,使用消息队列异步请求,但是客户端同步收到结果 异步处理,同步返回?为什么会有这样一个需求?既然接口要求同步返回,那么直接阻塞就好了,要什么异步消息同步返...
如何设计一个接口,使用消息队列异步请求,但是客户端同步收到结果 异步处理,同步返回?为什么会有这样一个需求?既然接口要求同步返回,那么直接阻塞就好了,要什么异步消息同步返...
从一个场景说起 在刷抖音有刷到过重复内容吗,这么多的推荐内容要推荐给这么多的用户,它是怎么保证每个用户在看推荐内容时,保证不会出现之前已经看过的推荐视频呢?也就是说,抖音是如...
HTTP 1.0 特点 1.0的HTTP版本,是一种无状态,无连接的应用层协议。 HTTP1.0规定浏览器和服务器保持短暂的链接。 浏览器每次请求都需要与服务器建立一个TCP...
make和new new(T) 和 make(T, args) 是Go语⾔内建函数,⽤来分配内存,但适⽤的类型不⽤。 new(T) 会为了 T 类型的新值分配已置零的内存空间...
前言 本章节有且仅有一个目的,那就是让你的 Go 程序遇到 panic。 D.1 数组/切片索引越界 运行结果: D.2 空指针调用 运行结果: D.3 过早关闭 HTTP ...
前言 可以从 Go 源码目录结构和对应代码文件了解 Go 在不同平台下的网络 I/O 模式的实现。比如,在 Linux 系统下基于 epoll,freeBSD 系统下基于 k...
一、TCP 简介 第一部分先为大家介绍一下 TCP 的主要概念,并讲解一下 TCP 的三个重要特性。 面向连接; 基于字节流; 可靠性。 关于网络分层的概念实在是老生常谈了,...
简述 G — 表示 Goroutine,它是一个待执行的任务; M — 表示操作系统的线程,它由操作系统的调度器调度和管理; P — 表示处理器,它可以被看做运行在线程上的本...
Key的选择注意点 key 类型的 K 必须是可比较的(comparable),也就是可以通过 == 和 != 操作符进行比较;value 的值和类型无所谓,可以是任意的类型...
数据结构 与切片的数据结构相比,少了cap,是一个只读的切片 因为字符串作为只读的类型,我们并不会直接向字符串直接追加元素改变其本身的内存空间,所有在字符串上的写入操作都是通...
设计目的 Once 常常用来初始化单例资源,或者并发访问只需初始化一次的共享资源,或者在测试的时候初始化一次测试资源。 使用场景 sync.Once 只暴露了一个方法 Do,...
设计目的 为等待 / 通知场景下的并发问题提供支持。Cond 通常应用于等待某个条件的一组 goroutine,等条件变为 true 的时候,其中一个 goroutine 或...
设计目的 可以等待一组 Goroutine 的返回,一个比较常见的使用场景是批量发出 RPC 或者 HTTP 请求将原本顺序执行的代码在多个 Goroutine 中并发执行,...
设计目的 大多数读请求之间互不影响,在读多写少的场景下,可以分离读写操作,提高读写并发性能. 限制 只能读读并发, 读写, 写写操作不并发 RWMutex RWMutex 在...
设计目的 保证多个 Goroutine 在访问同一片内存时不会出现竞争条件等问题 Locker接口 Locker 的接口定义了锁同步原语的方法集: Mutex 以及读写锁 R...
特性 sync.Pool 数据类型用来保存一组可独立访问的"临时"对象,它说明了 sync.Pool 这个数据类型的特点,也就是说,它池化的对象会在未来的某个时候被毫无预兆地...
设计理念 执行业务处理的 goroutine 不要通过共享内存的方式通信,而是要通过 Channel 通信的方式分享数据。 Channel 类型和基本并发原语是有竞争关系的,...
array 特征 内存连续,可以根据索引获取元素. 初始化之后大小就无法改变. 存储元素类型相同、大小相同的两个数组才是一个类型 初始化 特殊点 在不考虑逃逸分析的情况下,如...