Подтвердить что ты не робот

Когда вы должны использовать многопоточность? И будет ли многопоточность полезной, если разные потоки выполняют взаимозависимые задачи?

Это были только два вопроса, на которые я не мог ответить в интервью, которое я отклонил прошлой ночью.

4b9b3361

Ответ 1

В: Когда вы должны использовать многопоточность?

A: "Ваш вопрос очень широк. Существует несколько нетривиальных систем, где функциональность может быть выполнена просто, быстро и надежно только с одним потоком. Например: [выберите типичную систему, которую целевая компания продает и выберете пару аспектов своей функции, которые будут лучше перечеркнуты - тяжелый процессор, комм, многопользовательский - просто выберите что-то вероятное и объясните].

Q: Будет ли многопоточность полезной, если разные потоки выполняют взаимозависимые задачи?

A: "Зависит от того, что вы подразумеваете под" выполнением задач ". Многопоточность, несомненно, будет полезна, если потоки обрабатывают взаимно независимые данные одновременно - это уменьшает требования к блокировкам и вероятности взаимоблокировок в суперлинейном режиме с числом замков OTOH, нет проблем с потоками, выполняющими один и тот же код, это безопасно и очень часто".

Rgds, Мартин

Ответ 2

Вы должны использовать многопоточность, если хотите выполнять тяжелые операции без "блокировки" потока.
Пример в пользовательских интерфейсах, где вы выполняете тяжелую обработку в фоновом потоке, но пользовательский интерфейс все еще активен.

Если потоки выполняют взаимоисключающие задачи, это лучше всего, поскольку нет необходимости в накладных расходах для синхронизации между потребностями нитей

Ответ 3

Вы должны определенно использовать многопоточность в приложениях графического интерфейса, когда вы вызываете трудоемкие задачи из основного цикла событий. То же самое относится к серверному приложению, которое может блокироваться при выполнении ввода-вывода.

Для второго вопроса, как правило, да, когда у вас есть машина с несколькими ядрами ЦП. В этом случае эти независимые задачи могут выполняться параллельно.

Ответ 4

Многопоточность - это способ введения параллельности в вашу программу. В любом случае, если в вашей программе могут быть параллельные пути (части, которые не зависят от результата от другой части), использование может использовать его.

Специально со всеми этими многоядерными машинами в настоящее время это функция, которую следует использовать.

Некоторыми примерами будут обработка больших данных, где вы можете разделить их на куски и сделать это в нескольких потоках, обработке файлов и т.д.

К вашему второму вопросу было бы лучше, если задачи взаимно независимы - причины

  • никакие общие данные не означают никаких утверждений
  • нет необходимости в какой-либо упорядоченной обработке (зависимости), поэтому каждый поток может работать при наличии ресурсов
  • проще реализовать

Ответ 5

Я бы использовал многопоточность для таких задач, как рендеринг изображений, вычисления грубой силы и т.д. В основном задачи, которые выполняют повторяющиеся операции для достижения результата.

Что касается второго вопроса, я бы сказал, что это может быть. Когда я закодировал свой движок рендеринга, я многократно использовал многопоточность. Каждый проход требовал от меня работать на тонну матриц, векторов и т.д., Но каждый проход был полностью независим от всех остальных.

Ответ 6

Вы можете использовать многопоточность, если задачи могут быть разбиты, которые могут выполняться параллельно. Как производить и потреблять, проверять и сохранять, читать и проверять.

Во втором вопросе, да, полезно сделать программу в многопоточность, если они выполняют независимые задачи.

Ответ 7

В общем случае многопоточность используется в тех случаях, когда время выполнения дросселируется/узкое место процессором, в отличие от других областей, таких как IO. Второй вопрос действительно весьма субъективен этому обстоятельству. Например, если они взаимно независимы, но оба делают тяжелый IO, вы, возможно, не обязательно получите большой выигрыш.

Ответ 8

Когда вы должны использовать многопоточность?

Многопоточность - это процесс одновременного выполнения нескольких потоков. Вы должны использовать многопоточность, если вы можете выполнять несколько операций вместе, чтобы сэкономить время.

Будет ли многопоточность полезной, если разные потоки выполняют взаимозависимые задачи?

обычно да. Многопоточность обычно бывает полезной, если разные потоки выполняют взаимозависимые задачи, так что они не влияют на другие потоки, если исключение возникает в одном потоке.