Хорошее использование потоков? - PullRequest
2 голосов
/ 17 апреля 2009

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

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

Другая проблема заключается в том, что это приложение, скорее всего, будет работать как в Windows, так и в Linux, и я не уверен, стоит ли добавлять код, использующий две разные системы потоков.

Ответы [ 4 ]

5 голосов
/ 17 апреля 2009

Ну, первый вопрос: у вас действительно есть проблема?

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

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

4 голосов
/ 17 апреля 2009

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

Если вы считаете, что есть неплохой шанс, что он сделает что-то полезное для вас, создайте быструю тестовую версию и профилируйте ее .

2 голосов
/ 17 апреля 2009

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

Подходит ли оно для вашего приложения, трудно сказать без подробностей.

1 голос
/ 17 апреля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...