docs: function runQueue(){
  		clearTimeout(timerRunQueue);
  		if( !queue.length ){
  			// 誰も待っていない場合
  			return;
  		}
  
  		new Promise(function(rlv){rlv();}).then(function(){ return new Promise(function(rlv, rjt){
  			var threadNumber = false;
  
  			// 空きスレッドを検索
  			for( var idx in threads ){
  				if( !threads[idx].active ){
  					threadNumber = idx;
  					threads[threadNumber].active = true; // スレッドを予約
  					break;
  				}
  			}
  			if( threadNumber === false ){
  				// スレッドがあいてない場合ポーリング
  				timerRunQueue = setTimeout(function(){
  					runQueue();
  				}, 10);
  				return;
  			}
  
  			var currentData = shift();
  
  			if(status[currentData.id] == 99){
  				// 削除された Queue Item
  				status[currentData.id] = undefined; delete(status[currentData.id]); // <- 処理済み にステータスを変更
  				threads[threadNumber].active = false; // 予約したスレッドを解放
  				runQueue();
  				return;
  			}
  
  
  			// ステータスを 実行中 に変更
  			status[currentData.id] = 2;
  
  			// 予約したスレッドに、Queue Item ID を記憶する
  			threads[threadNumber].active = currentData.id;
  
  			// 実行
  			options.process(currentData.data, function(){
  				status[currentData.id] = undefined; delete(status[currentData.id]); // <- 処理済み にステータスを変更
  				threads[threadNumber].active = false;
  				runQueue();
  			}, {
  				'id': currentData.id
  			});
  		}); });
  		return;
  	}