List specific programming concepts that should code adhere to that it will run in parallel. For example, if a block of code does not change shared state, it should be able to be done on another thread. What other such attributes exist? I would imagine there only to be a small number of such concerns by which to evaluate whether code is a good candidate for parallelization, so what are they? For example SQL Server when creating the execution plans much use these test to decide for each query section whether to run it in serial or allow it to run on another CPU. All I'm looking for is the list of theoretical rules, nothing implementation-specific.