Я много читаю о Волокна, или же зеленые нити, или любое другое имя, которое мы можем дать темам пользователей. Я начал читать документацию и учебные пособия (это ссылки на C ++, но мне не нужен конкретный язык):
Тем не менее, кажется, я не могу понять основы о волокнах. Я знаю, что волокна — это способ совместной многозадачности, но документации о взаимодействии потоков и волокон в реальных случаях, насколько я обнаружил, недостаточно.
Какие случаи практического использования волокон?
Например, каждый документ на самом деле использует асинхронный ввод-вывод в качестве примера, но что, если у меня нет проблем с вводом-выводом? Например, что если моя проблема считать слова в огромном файле? Здесь я бы просто разделил файл по потокам, могут ли волокна как-то помочь? Я полагаю, что связанные с ЦП вычисления, такие как числовые задачи (например, матричные / векторные операции), не подходят для волокон, но, опять же, я могу быть совершенно неправ.
Что делать, если моя проблема заключается в подсчете слов в огромном файле? …, волокна могут как-то помочь?
Нет.
каждый документ на самом деле использует асинхронный ввод-вывод в качестве примера
Асинхронный ввод-вывод Проблема в том, что потоки изначально предназначались для решения, когда многопроцессорные системы еще не вышли из лаборатории. Потоки — это альтернативный способ структурировать программу, которая должна была ожидать ввода от нескольких разных несинхронизированных источников и своевременно реагировать на эти входные данные.
В зависимости от того, как они были реализованы, потоки в те времена могли быть где угодно в масштабе от «в основном того же» до «полностью идентичного» с тем, что мы сегодня называем «зелеными нитями» или «волокнами».
Когда на рынке появились многопроцессорные системы, многопоточность была воспринята как естественный и очевидный способ использования возможностей параллельной обработки.
Волокна должны иметь меньшие накладные расходы при создании и переключении контекста, чем потоки ОС. Таким образом, теоретически, если у вас есть решение, где у вас много блокировок на блокировках, вы можете увидеть улучшение производительности от волокон, потому что потоки ОС, на которых работают волокна, будут использовать больше выделенного времени выполнения. Это связано с тем, что, когда волокно блокирует мьютекс / блокировку волокна, основной поток ОС вызывает планировщик волокна, который будет запускать другое волокно, и все это без переключения контекста потока ОС. Это основная идея потоковых моделей M: N.
Другой случай, если вам нужно создавать и уничтожать потоки с большой частотой или в большом количестве. Поскольку волокна создаются быстрее и, как правило, более легкие, чем потоки ОС, их можно использовать в гораздо больших количествах и для более тонкого параллелизма (в теории).
Одним из практических приложений является моделирование на основе больших агентов с использованием актерской модели. С волокнами каждый агент / субъект может работать на своем собственном волокне.