Parallel Program Scheduling Techniques