2019-01-21 00:37:31.535 
2019-01-21 00:37:31.535 Pure PHP multiTask implementation
2019-01-21 00:37:31.535 Proof of concept
2019-01-21 00:37:31.535 
2019-01-21 00:37:31.535 It's not impossible. It's easy.
2019-01-21 00:37:31.535 
2019-01-21 00:37:31.535 Start 10000 iterations
2019-01-21 00:37:31.535 
2019-01-21 00:37:31.600 Average time:
2019-01-21 00:37:31.600 Total time of 4 tasks = 5.9529 μs
2019-01-21 00:37:31.600 
2019-01-21 00:37:31.600 Total test time 0.064927 sec
2019-01-21 00:37:31.653 Total test time (Without time counting) 0.052661 sec
2019-01-21 00:37:31.653 
2019-01-21 00:37:31.653 Costs of time (including time counting costs): 
2019-01-21 00:37:31.653 Call task function 0.2364 μs
2019-01-21 00:37:31.653 Prepare task environment 0.6767 μs
2019-01-21 00:37:31.653 Start new task 1.1754 μs
2019-01-21 00:37:31.653 End task 0.8925 μs
2019-01-21 00:37:31.653 
2019-01-21 00:37:31.653 1 μs = 1/1000000 = 0.000001 sec.
2019-01-21 00:37:31.653 

One task can start other task 
  rtask("task_name"); 
or call other task 
  rcall("task_name");

Where "task_name" is a name of PHP function written using special rules.
Thus the applying of these rules to any user-defined function makes the function as task

Т.е. любая пользовательская функция может быть превращена в задачу и выполняться параллельно другим таким же задачам.
При этом время переключения между задачами составляет 13-20 μs в зависимости от реализации.
Фактически это накладные расходы на подготовку окружения задачи.
В среднем нормально написанная задача занимает около 50 μs на вызов. Т.е. за 1 секунду можно обслужить примерно 20000 вызовов задач.
Таким образом при наличии 10 задач каждая будет вызываться примерно раз в 500 μs или 2000 раз в секунду. По сути это время реакции системы.
В данном примере среднее время вызова задачи составляет 1.49 μs и для 4х задач время реакции примерно 5.9529 μs
Реализован данный функционал на чистом PHP, не требует каких либо расширений и работает с любой версией PHP. 
Ну во всяком случае должен :)
Current PHP version: 7.0.33-0+deb9u1

2019-01-21 00:37:31.653 Пример реальной работы
2019-01-21 00:37:31.653 Стартуем  от 3 до 7 задач ожидания со случайным временем от 0.1 до 1.5 сек.
единственная функция каждой задачи это ждать заданный интервал времени 
и выводить информацию о своем старте и завершении.

$n=mt_rand(3,7);
for( $i=0; $i < $n; $i+=1)
{
  $time=mt_rand(100,1500)/1000.0;
  rtask("wait",$time);
}

2019-01-21 00:37:31.653 start task 5 wait 1.13 sec
2019-01-21 00:37:31.653 start task 6 wait 0.89 sec
2019-01-21 00:37:31.653 start task 7 wait 1.238 sec
2019-01-21 00:37:31.653 start task 8 wait 0.337 sec
2019-01-21 00:37:31.653 start task 9 wait 1.448 sec
2019-01-21 00:37:31.653 start task 10 wait 1.298 sec
2019-01-21 00:37:31.653 start task 11 wait 0.749 sec
2019-01-21 00:37:31.990 task 8 complete
2019-01-21 00:37:32.403 task 11 complete
2019-01-21 00:37:32.544 task 6 complete
2019-01-21 00:37:32.783 task 5 complete
2019-01-21 00:37:32.892 task 7 complete
2019-01-21 00:37:32.951 task 10 complete
2019-01-21 00:37:33.101 task 9 complete
2019-01-21 00:37:33.102 Done.