Мой вопрос: какое приложение требует так много параллельных потоков выполнения?
1) Тот факт, что язык «масштабируется», означает, что у вас будет меньше шансов отказаться от него, когда все станет сложнее в будущем. (Это называется концепцией «Целого продукта».) Именно поэтому многие люди отказываются от Apache для Nginx. Если вы приблизитесь к «жесткому пределу», накладываемому накладными расходами потоков, вы испугаетесь и начнете думать о том, как его преодолеть. Веб-сайты никогда не могут предсказать, какой объем трафика они получат, поэтому разумно тратить немного времени на масштабируемость.
2) Одна процедура на запрос только начало. Есть много причин для использования внутренних программ.
- Рассмотрим веб-приложение с 100 одновременными запросами, но каждый запрос генерирует 100 внутренних запросов. Очевидным примером является агрегатор поисковой системы. Но практически любое приложение может создавать процедуры для каждой «области» на экране, а затем генерировать их независимо, а не последовательно. Например, каждая страница на Amazon.com состоит из более чем 150 внутренних запросов, собранных специально для вас. Вы не замечаете, потому что они параллельны, а не последовательны, и каждая «область» - это собственный веб-сервис.
- Рассмотрим любое приложение, где надежность и задержка имеют первостепенное значение. Вы, вероятно, хотите, чтобы каждый входящий запрос запускал несколько внутренних запросов и возвращал те данные, которые были получены первыми .
- Рассмотрим любое «соединение клиента», выполненное в вашем приложении. Вместо того, чтобы говорить «для каждого элемента, получить данные», вы можете выделить кучу программ. Если у вас есть куча подчиненных БД для запроса, вы будете волшебным образом работать в N раз быстрее. Если вы этого не сделаете, это не будет медленнее.
Возвращает уменьшение попадания, когда число потоков / процессов намного больше, чем количество физических ядер
Производительность - не единственная причина разбить программу на CSP . Это на самом деле может сделать программу проще для понимания, и некоторые проблемы могут быть решены с помощью гораздо меньшего количества кода.
Как и на слайдах, ссылки на которые приведены выше, параллелизм в вашем коде является способом решения проблемы. Отсутствие процедур - это как отсутствие структуры данных Map / Dictonary / Hash на вашем языке. Вы можете обойтись без этого. Но как только он у вас есть, вы начинаете использовать его везде, и это действительно упрощает вашу программу.
Раньше это означало многопотоковое программирование. Но это было сложно и опасно - до сих пор не так много инструментов, чтобы убедиться, что вы не создаете гонки. И как вы препятствуете будущему сопровождающему совершить ошибку? Если вы посмотрите на большие / сложные программы, вы увидите, что они тратят МНОГО ресурсов в этом направлении.
Поскольку параллелизм не является первоклассной частью большинства языков, у современных программистов есть слепое пятно в отношении того, почему это было бы полезно для них. Это станет еще более очевидным, поскольку каждый телефон и наручные часы приближаются к 1000 ядрам. Отправляйся на корабли со встроенным детектором рас.