Потоки в скриптах являются псевдопотоками. Т.е. на параметр "thread" новый поток не создается физически, а функция заносится в список тредовых очередей.
Реально создается пулл потоков, потоки из этого пула производят все тредовые, да и не тредовые вычисления поочереди. Соответственно чей-то скрипт работает, чей-то ждет своей очереди. Поэтому точной синхронизации добиться не получиться. Чем меньше нагрузка на проц - тем точнее будут работать алгоритмы.
Поэтому со слипами правило такое - слип будет продолжаться не меньше указанного времени. Исходя из загрузки процессора в реальности слип будет равен или больше заданного времени.