mirror of
https://github.com/nodejs/node.git
synced 2025-05-14 21:36:02 +00:00

Free pool in round_robin scheduler is implemented as an array. There were constant lookups being for distributing load on other workers in free pool. Reimplementing in Map will create will be more performant as compared to Array implementation. This was done for all in past but free wasn't implemented at that time. PR-URL: https://github.com/nodejs/node/pull/32505 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
'use strict';
|
|
const { Map } = primordials;
|
|
const assert = require('internal/assert');
|
|
const dgram = require('internal/dgram');
|
|
const net = require('net');
|
|
|
|
module.exports = SharedHandle;
|
|
|
|
function SharedHandle(key, address, port, addressType, fd, flags) {
|
|
this.key = key;
|
|
this.workers = new Map();
|
|
this.handle = null;
|
|
this.errno = 0;
|
|
|
|
let rval;
|
|
if (addressType === 'udp4' || addressType === 'udp6')
|
|
rval = dgram._createSocketHandle(address, port, addressType, fd, flags);
|
|
else
|
|
rval = net._createServerHandle(address, port, addressType, fd, flags);
|
|
|
|
if (typeof rval === 'number')
|
|
this.errno = rval;
|
|
else
|
|
this.handle = rval;
|
|
}
|
|
|
|
SharedHandle.prototype.add = function(worker, send) {
|
|
assert(!this.workers.has(worker.id));
|
|
this.workers.set(worker.id, worker);
|
|
send(this.errno, null, this.handle);
|
|
};
|
|
|
|
SharedHandle.prototype.remove = function(worker) {
|
|
if (!this.workers.has(worker.id))
|
|
return false;
|
|
|
|
this.workers.delete(worker.id);
|
|
|
|
if (this.workers.size !== 0)
|
|
return false;
|
|
|
|
this.handle.close();
|
|
this.handle = null;
|
|
return true;
|
|
};
|