Это ничего не делает параллельно. Вы создаете программу и сразу ждете ее возвращаемого значения, где каждая программа выполняет вычисления, записывает результат в канал и возвращает. Так что здесь нет параллелизма. Вы можете получить некоторое одновременное выполнение, если переместите чтения канала в строку после создания всех подпрограмм, чтобы могли выполняться две подпрограммы.
Ваша программа неверна, и поэтому она не завершается. mid
это не (end-start)/2
, это (end+start)/2
. Вполне вероятно, что это относится к случаю, когда end-start
больше 10000, а mid
таков, что вы в конечном итоге запускаете одни и те же начальные и конечные значения снова и снова. Поместите оператор println после этого среднего вычисления, чтобы увидеть начальные и конечные значения.