Вообще сделать что-либо многопоточным -- задача нетривиальная. Представьте, что вы идете на кухню завтракать: для этого вам нужно сделать чай и подогреть себе еды.
Если делать последовательно, то
Для чая:
1. Вам нужно налить воду в чайник
2. Поставить чайник на место
3. Включить чайник
4. <свободное время когда можно заняться едой>
5. Положить пакетик в кружку
6. Налить горячую воду в кружку
Для еды:
1. Открыть холодильник
2. Достать завтрак из холодильника
3. Закрыть холодильник
4. Поставить завтрак в микроволновку (разгореваться)
5. <свободное время когда можно заняться чаем>
6. Достать еду из микроволновки
В целом мы можем делать шаги параллельно, но всё равно по очереди, например, налить воды в чайник, после этого выполнить этапы с доставанием еды из холодильника, затем понести чайник и еду к базе (электрической) и микроволновке. Но это всё мы так или иначе выполняем в один поток. Это называется "фейковая многопоточность" (ну или как-то ещё, мне похуй).
А если бы мы параллелили эти этапы, то левой рукой мы бы наливали воду в чайник, а правой открывали холодильник одновременно. Доставали еду и ставили чайник на место. Закрывали бы холодильник и нажимали на кнопку "включить" на чайнике.
Попробуйте одновременно похлопать себя по голове и погладить живот.
Так или иначе, встроить многоядерность туда, где она не закладывалась практически невозможно, потому что нужно очень четко ею управлять, чтобы мы случайно не поставили чайник в микроволновку.