why concurrent programming is important