如何設(shè)計(jì)一個(gè)接口,使用消息隊(duì)列異步請(qǐng)求,但是客戶端同步收到結(jié)果 ??異步處理,同步返回?為什么會(huì)有這樣一個(gè)需求?既然接口要求同步返回,那么直接阻塞就好了,要什么異步消息同步返...
如何設(shè)計(jì)一個(gè)接口,使用消息隊(duì)列異步請(qǐng)求,但是客戶端同步收到結(jié)果 ??異步處理,同步返回?為什么會(huì)有這樣一個(gè)需求?既然接口要求同步返回,那么直接阻塞就好了,要什么異步消息同步返...
從一個(gè)場(chǎng)景說起 在刷抖音有刷到過重復(fù)內(nèi)容嗎,這么多的推薦內(nèi)容要推薦給這么多的用戶,它是怎么保證每個(gè)用戶在看推薦內(nèi)容時(shí),保證不會(huì)出現(xiàn)之前已經(jīng)看過的推薦視頻呢?也就是說,抖音是如...
HTTP 1.0 特點(diǎn) 1.0的HTTP版本,是一種無狀態(tài),無連接的應(yīng)用層協(xié)議。 HTTP1.0規(guī)定瀏覽器和服務(wù)器保持短暫的鏈接。 瀏覽器每次請(qǐng)求都需要與服務(wù)器建立一個(gè)TCP...
前言 本章節(jié)有且僅有一個(gè)目的,那就是讓你的 Go 程序遇到 panic。 D.1 數(shù)組/切片索引越界 運(yùn)行結(jié)果: D.2 空指針調(diào)用 運(yùn)行結(jié)果: D.3 過早關(guān)閉 HTTP ...
前言 可以從 Go 源碼目錄結(jié)構(gòu)和對(duì)應(yīng)代碼文件了解 Go 在不同平臺(tái)下的網(wǎng)絡(luò) I/O 模式的實(shí)現(xiàn)。比如,在 Linux 系統(tǒng)下基于 epoll,freeBSD 系統(tǒng)下基于 k...
一、TCP 簡(jiǎn)介 第一部分先為大家介紹一下 TCP 的主要概念,并講解一下 TCP 的三個(gè)重要特性。 面向連接; 基于字節(jié)流; 可靠性。 關(guān)于網(wǎng)絡(luò)分層的概念實(shí)在是老生常談了,...
簡(jiǎn)述 G — 表示 Goroutine,它是一個(gè)待執(zhí)行的任務(wù); M — 表示操作系統(tǒng)的線程,它由操作系統(tǒng)的調(diào)度器調(diào)度和管理; P — 表示處理器,它可以被看做運(yùn)行在線程上的本...
數(shù)據(jù)結(jié)構(gòu) 與切片的數(shù)據(jù)結(jié)構(gòu)相比,少了cap,是一個(gè)只讀的切片 因?yàn)樽址鳛橹蛔x的類型,我們并不會(huì)直接向字符串直接追加元素改變其本身的內(nèi)存空間,所有在字符串上的寫入操作都是通...
設(shè)計(jì)目的 Once 常常用來初始化單例資源,或者并發(fā)訪問只需初始化一次的共享資源,或者在測(cè)試的時(shí)候初始化一次測(cè)試資源。 使用場(chǎng)景 sync.Once 只暴露了一個(gè)方法 Do,...
設(shè)計(jì)目的 為等待 / 通知場(chǎng)景下的并發(fā)問題提供支持。Cond 通常應(yīng)用于等待某個(gè)條件的一組 goroutine,等條件變?yōu)?true 的時(shí)候,其中一個(gè) goroutine 或...
設(shè)計(jì)目的 可以等待一組 Goroutine 的返回,一個(gè)比較常見的使用場(chǎng)景是批量發(fā)出 RPC 或者 HTTP 請(qǐng)求將原本順序執(zhí)行的代碼在多個(gè) Goroutine 中并發(fā)執(zhí)行,...
設(shè)計(jì)目的 大多數(shù)讀請(qǐng)求之間互不影響,在讀多寫少的場(chǎng)景下,可以分離讀寫操作,提高讀寫并發(fā)性能. 限制 只能讀讀并發(fā), 讀寫, 寫寫操作不并發(fā) RWMutex RWMutex 在...
設(shè)計(jì)目的 保證多個(gè) Goroutine 在訪問同一片內(nèi)存時(shí)不會(huì)出現(xiàn)競(jìng)爭(zhēng)條件等問題 Locker接口 Locker 的接口定義了鎖同步原語的方法集: Mutex 以及讀寫鎖 R...
特性 sync.Pool 數(shù)據(jù)類型用來保存一組可獨(dú)立訪問的"臨時(shí)"對(duì)象,它說明了 sync.Pool 這個(gè)數(shù)據(jù)類型的特點(diǎn),也就是說,它池化的對(duì)象會(huì)在未來的某個(gè)時(shí)候被毫無預(yù)兆地...
設(shè)計(jì)理念 執(zhí)行業(yè)務(wù)處理的 goroutine 不要通過共享內(nèi)存的方式通信,而是要通過 Channel 通信的方式分享數(shù)據(jù)。 Channel 類型和基本并發(fā)原語是有競(jìng)爭(zhēng)關(guān)系的,...
array 特征 內(nèi)存連續(xù),可以根據(jù)索引獲取元素. 初始化之后大小就無法改變. 存儲(chǔ)元素類型相同、大小相同的兩個(gè)數(shù)組才是一個(gè)類型 初始化 特殊點(diǎn) 在不考慮逃逸分析的情況下,如...