mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-11-13 17:36:12 +08:00
第十四章下部分 (#835)
This commit is contained in:
@@ -4,10 +4,10 @@
|
||||
|
||||
考虑以下的客户端-服务器结构:客户端协程执行一个无限循环从某个源头(也许是网络)接收数据;数据读取到 `Buffer` 类型的缓冲区。为了避免分配过多的缓冲区以及释放缓冲区,它保留了一份空闲缓冲区列表,并且使用一个缓冲通道来表示这个列表:`var freeList = make(chan *Buffer,100)`
|
||||
|
||||
这个可重用的缓冲区队列(freeList)与服务器是共享的。 当接收数据时,客户端尝试从 `freeList` 获取缓冲区;但如果此时通道为空,则会分配新的缓冲区。一旦消息被加载后,它将被发送到服务器上的 `serverChan` 通道:
|
||||
这个可重用的缓冲区队列 (`freeList`) 与服务器是共享的。 当接收数据时,客户端尝试从 `freeList` 获取缓冲区;但如果此时通道为空,则会分配新的缓冲区。一旦消息被加载后,它将被发送到服务器上的 `serverChan` 通道:
|
||||
|
||||
```go
|
||||
var serverChan = make(chan *Buffer)
|
||||
var serverChan = make(chan *Buffer)
|
||||
```
|
||||
|
||||
以下是客户端的算法代码:
|
||||
@@ -49,7 +49,7 @@ func server() {
|
||||
}
|
||||
```
|
||||
|
||||
但是这种方法在 `freeList` 通道已满的时候是行不通的,因为无法放入空闲 `freeList` 通道的缓冲区会被“丢到地上”由垃圾收集器回收(故名:漏桶算法)
|
||||
但是这种方法在 `freeList` 通道已满的时候是行不通的,因为无法放入空闲 `freeList` 通道的缓冲区会被“丢到地上”由垃圾收集器回收(故名:漏桶算法)。
|
||||
|
||||
|
||||
## 链接
|
||||
|
||||
Reference in New Issue
Block a user