Multi-Core Programming Increasing Performance through Software Multithreading