Создание нового потока и его частое уничтожение - не очень хорошая идея. Во-первых, у вас должен быть способ связать это так, чтобы он не потреблял слишком много памяти (например, пространство стека) или достигал точки, когда происходит много упреждающих действий, потому что потоки конкурируют за время на ЦП. Во-вторых, вы потратите много работы, связанной с созданием новых тем и их удалением. (Это зависит от вашей операционной системы. В некоторых ОС создание потоков может быть дешевым, а в других — дорогим.)
Похоже, то, что вы пытаетесь реализовать, - это рабочая очередь. Я не смог найти хорошую статью в Википедии по этому поводу, но она близка: Шаблон пула потоков.
Можно часами говорить о том, как это реализовать, и о различных алгоритмах параллельных очередей, которые можно использовать. Но идея состоит в том, что вы создаете N потоков, которые истощают очередь и выполняют некоторую работу в ответ на элементы, поставленные в очередь. Как правило, вы также хотите, чтобы потоки, скажем, ожидали на семафоре, пока нет элементов в очереди -- рабочие потоки уменьшают этот семафор, а постановщик увеличивает его. Чтобы предотвратить слишком много постановки в очередь, когда рабочие потоки заняты и, следовательно, занимают слишком много ресурсов, вы также можете заставить их ждать семафора «количество доступных слотов очереди», который уменьшается на единицу в очереди, а рабочий поток увеличивается. Это только примеры, подробности зависят от вас. Вам также понадобится способ сообщить потокам, чтобы они перестали ждать работы.
person
asveikau
schedule
02.04.2011