Если у вас есть две различные последовательности событий, которые не зависят друг от-другой, затем рассмотреть его. Если вам нужно писать пучки логики, чтобы удостовериться, что две операции не попадают друг в друга, это окупается, делая эти два фрагмента кода более четкими.
Если, с другой стороны, вы обнаружите, что при попытке сделать что-то многопоточное, вам нужно добавить gobs кода для передачи результатов между потоками, поскольку один (или оба) не могут работать без какой-либо информации от другой , это хороший признак того, что вы пытаетесь создавать темы, где они не имеют смысл.
В одном случае, когда имеет смысл использовать многопоточность, даже если вам нужно добавить сообщение для этого, это когда у вас есть одна задача, которая должна оставаться доступной для ввода, а другая - для тяжелых вычислений. Один поток может опросить для ввода откуда-то, блокируя, когда ни один не доступен, так что, когда вход доступен, он своевременно отвечает и загружает задания в другой «рабочий» поток, так что обработка продолжается в любое время, а не только когда есть вход.
Еще одна вещь, которую следует учитывать, заключается в том, что даже когда работа «неловко параллельна» (т. Е. Требует небольшой или никакой связи между параллельными частями), бывают случаи, когда многопоточность может оказаться нецелесообразной. Если ваш процессор может назначать разные потоки для разных ядер, многопоточность даст вам ускорение, позволяя нескольким ядрам одновременно переваривать работу. Но на одном основном процессоре или даже многоядерном с несчастливой ОС, имея несколько потоков, не будет ускорять работу, поскольку одному ядру все равно придется пройти всю работу.