Parallel computing those that use concurrency, are more difficult to write than sequential ones, because concurrency introduces several new classes of potential software bugs, of which race conditions are the most common. Communication and synchronization between the different subtasks are typically some of the greatest obstacles to getting good parallel program performance. A theoretical upper bound on the speed-up of a single program as a result of parallelization is given by Amdahl's law. Traditionally, computer software has been written for serial computation. To solve a problem, an algorithm is constructed and implemented as a serial stream of instructions. These instructions are executed
Parallel port later than Windows 95/98 prevent user programs from directly writing to or reading from the LPT without additional software (kernel extensions). Current CNC Milling Machines also often make use of the parallel port to directly control the machine's motors and attachments. Traditionally IBM PC systems have allocated their first three parallel ports according to the configuration in the table below (if all three printer ports exist). If there is an unused slot, the port addresses of the others are moved up. (For example, if a port at 0x3BC does not exist, the port at 0x378 will then become the first