Ожидание потока и присоединение потока <thread>. Где параллелизм?

246
23 января 2018, 12:18

Добрый день! Пытаюсь вникнуть в потоки и не могу понять несколько вещей:

  1. Если мы создали поток и присоединились к нему, т.е. создающий поток не продолжится, пока не завершится тот, к которому присоединились, то в чём здесь параллелизм? По сути потоки по очереди выполняют свои подпрограммы?
  2. Зачем нужны "фоновые" потоки, если мы после отсоединения никак не можем к нему обратиться? Т.е. он может выполнять довольно узкие работы, которые не требует подачи или "отдачи" каких-либо данный?
  3. Из второго вытекает то, что большинство потоков будет таких, к которым нужно присоединяться, т.е. они выполняются последовательно. Тогда где параллелизм?

Я понимаю, что упускаю какую-то явную и очень важную деталь, объясните, пожалуйста, какую? Спасибо!

Answer 1

Ну вот допустим у вас задача умножить на 2 каждое число в массиве из 1000 элементов. Вы создаете поток, давая ему на обработку элементы с индексами 1...500, а в главном потоке начинаете обрабатываете элементы с индексами 501...1000. После того, как главный поток закончил обрабатывать свою часть задания, он вызывает join и начинает ждать второй поток (который к этому моменту тоже уже наверняка закончил обрабатывать свою часть задания). Так вот, выходит что пока первый поток обрабатывал свою половину задания, второй поток - обрабатывал вторую, т.е. два потока работали параллельно. Суть в том, что потоки большую часть времени проводят в выполнении заданий, а не в ожидании завершения чего-то там. Если же во второй поток отправить на обработку все 1000 элементов, и в главном сразу начать его ждать, то никакого параллелизма не будет.

READ ALSO
реализация стека через указатели

реализация стека через указатели

При вводе 0 выводится не число на вершине стека, а какой-то мусорВ чём проблема?

321
Работа с нативным кодом из .Net Core

Работа с нативным кодом из .Net Core

У Microsoft есть статья, посвященная работе с нативным кодов вNet Core на различных платформах

278
Почему вылетает программа после ввода name

Почему вылетает программа после ввода name

Друзья,вылетает программа после ввода поля tabl[i]name; Не могу понять в чём проблема

242
Java, почему не работает код, буфер обмена

Java, почему не работает код, буфер обмена

Помогите, пожалуйста, исправить код моей первой программыОна должна анализировать буфер обмена на наличие в нём 5-ти значного числа начинающегося...

349