Skip to content

Instantly share code, notes, and snippets.

@sunnylost
Created June 9, 2017 10:33
Show Gist options
  • Save sunnylost/23bd46e2899ef1f93b2804c8dbe14b4a to your computer and use it in GitHub Desktop.
Save sunnylost/23bd46e2899ef1f93b2804c8dbe14b4a to your computer and use it in GitHub Desktop.
Multi-thread Share
let cluster = require( 'cluster' ),
gid = 0,
callbackMap = new Map
if ( cluster.isMaster ) {
const cache = new Map
cluster.on( 'message', ( worker, message ) => {
let value
if ( message.type === 'get' ) {
value = {
id : message.id,
ok : true,
value: cache.get( message.key )
}
} else {
cache.set( message.key, message.value )
value = {
id: message.id,
ok: true
}
}
worker.send( value )
} )
} else {
process.on( 'message', ( msg ) => {
let callback = callbackMap.get( msg.id )
if ( callback ) {
callback( !msg.ok, msg )
}
} )
}
module.exports = {
set( key, value, callback ) {
let id = gid++
callback && callbackMap.set( id, callback )
process.send( {
id,
type: 'set',
key, value
} )
},
get( key, callback ) {
let id = gid++
callback && callbackMap.set( id, callback )
process.send( {
id,
type: 'get',
key
} )
}
}
let cluster = require( 'cluster' ),
tool = require( './index' ),
cpuNum = require( 'os' ).cpus().length
let obj = {
name: 123
},
key = 'a'
if ( cluster.isMaster ) {
while ( cpuNum-- ) {
cluster.fork()
}
} else {
if ( cluster.worker.id === 1 ) {
tool.set( key, obj )
setTimeout( () => {
tool.get( key, ( err, data ) => {
console.log( 'result is ', data.value )
} )
}, 1000 )
}
if ( cluster.worker.id === 2 ) {
setTimeout( () => {
tool.get( key, ( err, data ) => {
console.log( '2 === ', data )
} )
}, 3000 )
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment