The
branch of computing that concerns itself with organising processing of data with multiple
processors and
processes running
simultaneously. It concerns itself with things such as
synchronising different processes; access to shared resources in such a way as to avoid confusion by two processes trying to do the same things at once;
scaling algorithms to make use of multiple processors, threads, processes, preventing
deadlocks and more
Concurrent computing is seriously difficult. Even programmers who are capable and adept in many ways have trouble conceiving and implementing concurrency. This is one of the reasons that multiprocessor and massively parallel computers have not taken off: it's bloody hard to program them.
It is closely related to distributed computing; but distributed computing has more of a network flavour to it, concurrent computing can include network analysis, but typically examines systems that are more tightly coupled than just on a network.