postMessage( msg, transfer ) {

		return new Promise( ( resolve ) => {

			const workerId = this._getIdleWorker();

			if ( workerId !== - 1 ) {

				this._initWorker( workerId );
				this.workerStatus |= 1 << workerId;
				this.workersResolve[ workerId ] = resolve;
				this.workers[ workerId ].postMessage( msg, transfer );

			} else {

				this.queue.push( { resolve, msg, transfer } );

			}

		} );

	}
Post a message to an idle Worker. If no Worker is available,
the message is pushed into a message queue for later processing.

@param {Object} msg - The message.
@param {Array<ArrayBuffer>} transfer - An array with array buffers for data transfer.
@return {Promise} A Promise that resolves when the message has been processed.