Какова концепция реализации пула потоков (в C с помощью pthreads)? Как можно назначить поток для выполнения из пула потоков?Что такое пул потоков?
ответ
Пул потоков - это набор фиксированного количества потоков, созданных при запуске приложения. Затем потоки сидят, ожидая, что запросы придут к ним, как правило, через очередь, управляемую семафором. Когда запрос сделан, и есть хотя бы одно ожидание потока, поток проснулся, обслуживает запрос и возвращается к ожиданию на семафоре. Если потоки не доступны, запросы останавливаются до одного.
Пулы потоков - это, как правило, более эффективный способ управления ресурсами, чем просто запуск нового потока для каждого запроса. Однако некоторые архитектуры позволяют создавать новые потоки и добавлять их в пул по мере запуска приложения в зависимости от загрузки запроса.
Добавляя к ответу анонса, я хотел бы упомянуть, что существуют фиксированные пулы потоков, в которых есть фиксированные числа потоков; Кэшированные пулы потоков, которые могут динамически расти, а затем сокращаться, когда нет работы; Динамические пулы потоков также могут быть связаны максимальным количеством потоков и/или максимальной продолжительностью рабочей очереди. Я не думаю, что на самом деле существует определенная терминология для такого рода вещей, и редко встречаются нефиксированные TP, написанные на C, но по крайней мере один должен знать, что фиксированная TP не является единственным видом там.
Чтобы уточнить что-то в предыдущих ответах:
Причина, по которой инстанцировании все больше и больше нитей приводит к снижению эффективности является контекст времени переключения. OS периодически переключает один поток на другой на процессоре. Это связано с сохранением состояния одного потока и загрузкой состояния другого потока из памяти, поэтому для каждого контекстного переключателя требуется не пренебрежимо малое время, N мс.
Например, если у вас есть 10 потоков, переключение контекста takex 10 * N ms. Если у вас 1000 потоков, это 1000 * N мс. По мере увеличения количества параллельных потоков, в конечном итоге переключение контекста начинает подавлять любую эффективность, получаемую при многопоточности. Ваше приложение имеет сладкое пятно с точки зрения наилучшего количества потоков. Как только вы определите это сладкое число путем экспериментов, вы можете установить максимальный размер пула потоков в это число потоков, тем самым получая максимальную эффективность от многопоточности.
- 1. Что такое пул потоков в Java?
- 2. Что такое пулевое пул
- 3. Spring - убедитесь, что пул потоков
- 4. Что такое пул потоков, зависящий от системы по умолчанию?
- 5. Что такое пул потоков на C++ и как он реализован?
- 6. Что происходит, когда пул потоков исчерпан?
- 7. Как создать отдельный пул потоков, который использует пул основных потоков
- 8. Пул потоков в NodeJs
- 9. Как создать пул потоков?
- 10. HostingEnvironment.QueueBackgroundWorkItem использует пул потоков ASP.Net или другой пул потоков?
- 11. Когда создается пул потоков?
- 12. Пул потоков работает последовательно?
- 13. Пул потоков в Java
- 14. C++ Пул потоков
- 15. Пул потоков сервлета
- 16. Инициализировать пул потоков
- 17. PHP пул потоков?
- 18. IOS пул потоков
- 19. Пул потоков с BlockingCollection
- 20. Задача ориентированной пул потоков
- 21. Помощь в пул потоков
- 22. Пустой пул потоков
- 23. Пул потоков, похожий на многопроцессорный пул?
- 24. Что такое использование синхронизированных потоков?
- 25. Рекурсивное добавление потоков в пул потоков Java
- 26. Пул потоков для быстрых всплесков коротких потоков?
- 27. Python - Преобразование потоков в пул потоков?
- 28. Пул потоков Java ExecutorService: порядок выполнения потоков
- 29. Что такое пул, используемый для Rails?
- 30. Что такое пул в Foundation Kit?
Маловероятно, что для переключения контекста потребуется всего до 1 мс, как правило, это больше по линиям нас. Все остальное очень приятно. – CrazyCasta
, который сказал, что N является целым числом и кто сказал, что это> = 1? – Blah0x7B9
Использование единиц мс предполагает, что время будет порядка мс. Я считаю, что большинство людей, читающих ваш ответ, не подумают, что время переключения контекста было около 1 нас. – CrazyCasta