Multiprogramming is running multiple programs and they may not be under the same CPU but different CPU where as multitasking is many tasks are queued up for the CPU(s) and some CPU timing is given to each task giving the user an impressions that many tasks are being performed simultaneously but CPU switches between tasks to give such an impression.