blob: 48febce69ff9a75d5bb54957be9a46ba890abf02 (
about) (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
/**
* Collection of buffers to be shared between async processes.
* Avoids allocating buffers each time async process starts.
* bufSize - size of each buffer
* bufNo - number of buffers
* Caller has to make sure no more than bufNo async processes run simultaneously.
*/
function BufferPool(bufSize, bufNo) {
var bufferPool = []
for (var i = 0; i < bufNo; i++) {
bufferPool.push({
buf1: alloc(bufSize),
buf2: alloc(bufSize),
busy: false
})
}
var allocateBuffers = function () {
for (var j = 0; j < bufNo; j++) {
var bufferPair = bufferPool[j]
if (!bufferPair.busy) {
bufferPair.busy = true
return bufferPair
}
}
throw new Error('Async buffer limit reached')
}
return {
allocateBuffers: allocateBuffers,
freeBuffers: freeBuffers
}
function freeBuffers(bufferPair) {
bufferPair.busy = false
}
}
function alloc(bufSize) {
if (Buffer.alloc) {
return Buffer.alloc(bufSize)
}
return new Buffer(bufSize)
}
module.exports = BufferPool
|