Version : v11.10.1
Platform : Linux 4.20.11-arch1-1-ARCH deps: update openssl to 1.0.1j #1 SMP PREEMPT Wed Feb 20 21:11:12 UTC 2019 x86_64 GNU/Linux
Subsystem : worker_threads
Not sure if it's a bug or not, but I've noticed that destroy is never executed for the asyncIds pertaining to workers.
'use strict' ;
const threads = require ( 'worker_threads' ) ;
if ( ! threads . isMainThread ) {
console . log ( 'Thread: ' + threads . threadId ) ;
return ;
}
const hooks = require ( 'async_hooks' ) ;
async function spawn ( file ) {
const worker = new threads . Worker ( file ) ;
return new Promise ( ( resolve , reject ) => {
worker . on ( 'exit' , resolve ) ;
} ) ;
}
async function wait ( ms ) {
return new Promise ( cb => setTimeout ( cb , ms ) ) ;
}
( async ( ) => {
const active = new Map ( ) ;
const hook = hooks . createHook ( {
init ( id , type ) {
if ( type === 'WORKER' )
active . set ( id , type ) ;
} ,
destroy ( id ) {
active . delete ( id ) ;
}
} ) ;
hook . enable ( ) ;
for ( let i = 0 ; i < 10 ; i ++ )
await spawn ( __filename ) ;
await wait ( 1000 ) ;
hook . disable ( ) ;
await wait ( 1000 ) ;
console . log ( active ) ;
} ) ( ) ;
Output:
Thread: 1
Thread: 2
Thread: 3
Thread: 4
Thread: 5
Thread: 6
Thread: 7
Thread: 8
Thread: 9
Thread: 10
Map {
3 => 'WORKER',
23 => 'WORKER',
39 => 'WORKER',
55 => 'WORKER',
71 => 'WORKER',
87 => 'WORKER',
103 => 'WORKER',
119 => 'WORKER',
135 => 'WORKER',
151 => 'WORKER' }
Not sure if it's a bug or not, but I've noticed that
destroyis never executed for the asyncIds pertaining to workers.Output: