polished both versions, single and multithread, i can see a 3-5s difference between them