2022-08-13 00:32:43.860 
2022-08-13 00:32:43.861 Pure PHP multiTask implementation
2022-08-13 00:32:43.862 Proof of concept
2022-08-13 00:32:43.862 
2022-08-13 00:32:43.862 It's not impossible. It's easy.
2022-08-13 00:32:43.862 
2022-08-13 00:32:43.862 Start 10000 iterations
2022-08-13 00:32:43.862 
2022-08-13 00:32:44.031 Average time:
2022-08-13 00:32:44.031 Task: 'task_empty' Time = 0.82 μs
2022-08-13 00:32:44.031 Task: 'task_init' Time = 2.54 μs
2022-08-13 00:32:44.031 Task: 'task_init_and_start_new_task' Time = 6.29 μs
2022-08-13 00:32:44.031 Task: 'task_init_and_complete_task' Time = 4.73 μs
2022-08-13 00:32:44.031 Total time of 4 tasks = 15.8 μs
2022-08-13 00:32:44.031 
2022-08-13 00:32:44.031 Total test time 0.168563 sec
2022-08-13 00:32:44.171 Total test time (Without time counting) 0.139686 sec
2022-08-13 00:32:44.171 
2022-08-13 00:32:44.171 Costs of time (including time counting costs): 
2022-08-13 00:32:44.171 Call task function 0.82 μs
2022-08-13 00:32:44.171 Prepare task environment 1.72 μs
2022-08-13 00:32:44.171 Start new task 3.75 μs
2022-08-13 00:32:44.171 End task 2.19 μs
2022-08-13 00:32:44.171 
2022-08-13 00:32:44.171 1 μs = 1/1000000 = 0.000001 sec.
2022-08-13 00:32:44.171 

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 раз в секунду. По сути это время реакции системы.
В данном примере среднее время вызова задачи составляет 3.95 μs и для 4х задач время реакции примерно 15.8 μs
Реализован данный функционал на чистом PHP, не требует каких либо расширений и работает с любой версией PHP. 
Ну во всяком случае должен :)
Current PHP version: 5.6.40

2022-08-13 00:32:44.171 Пример реальной работы
2022-08-13 00:32:44.171 Стартуем  от 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);
}

2022-08-13 00:32:44.171 start task 20003 wait 0.438 sec
2022-08-13 00:32:44.171 start task 20004 wait 0.996 sec
2022-08-13 00:32:44.171 start task 20005 wait 0.536 sec
2022-08-13 00:32:44.171 start task 20006 wait 1.428 sec
2022-08-13 00:32:44.609 task 20003 complete
2022-08-13 00:32:44.707 task 20005 complete
2022-08-13 00:32:45.167 task 20004 complete
2022-08-13 00:32:45.599 task 20006 complete
2022-08-13 00:32:45.600 Done.