Как правильно сделать многопоточность?
Для этой задачи вообще многопоточность не нужна, достаточно асинхронно делать сетевые запросы.
В этом тебе может помочь мультикурл
php.net/manual/ru/function.curl-multi-init.php
Так же другие http-клиенты имеют асинхроные решения, например guzzle
docs.guzzlephp.org/en/stable/faq.html#can-guzzle-s...
Да даже простым fopen/fread это сделать можно.
Суть там везде одна - отправляешь 100500 запросов и далее в цикле проверяешь, пришел ли ответ или нет (и полностью ли пришел или частично). Если пришел - обрабатываешь, если не пришел или пришел не полностью - уходишь на следующую итерацию.
Может Node JS? Насколько я понимаю любая многопоточность в php это эмуляция. 
Она и в ноде не совсем настоящая, но все же лучше..