code: void sendTaskListToChannels(List<TaskRec> tasks) {
  		// group by type
  		//
  		Map<String, List<TaskRec>> grouped = new HashMap<String, List<TaskRec>>();
  		for (TaskRec taskRec : tasks) {
  			List<TaskRec> tlist = grouped.get(taskRec.name);
  			if (tlist == null) {
  				tlist = new ArrayList<TaskRec>();
  				grouped.put(taskRec.name, tlist);
  			}
  			tlist.add(taskRec);
  		}
  
  		// execute
  		//
  		for (String taskName : grouped.keySet()) {
  			final List<TaskRec> taskList = grouped.get(taskName);
  			TaskRec trec1 = taskList.get(0);
  			Channel channel = context.registry.getChannel(trec1.channel);
  			if (channel == null) { // should never happen
  				logger.warn("Task channel '{}' not exists. Use channel MAIN (task={} taskId={})", trec1.channel, trec1.name, trec1.taskId);
  				channel = context.registry.getChannel(Model.CHANNEL_MAIN);
  			}
  			TaskConfig taskConfig = context.registry.getTaskConfig(trec1.name);
  			if (taskConfig == null) {
  				handleUnknownTasks(taskList);
  				continue;
  			}
  
  			for (final TaskRec taskRec : taskList) {
  				logger.debug("got task: " + taskRec);
  				context.stats.metrics.loadTask(taskRec.taskId, taskRec.name, taskRec.channel);
  				channel.workers.execute(new TedRunnable(taskRec) {
  					@Override
  					public void run() {
  						processTask(taskRec);
  					}
  				});
  			}
  		}
  	}
docs: will send task to their channels for execution