В последнее время я много читал о том, что написание многопоточных приложений - огромная боль в шее, и достаточно узнал об этой теме, чтобы понять, хотя бы на каком-то уровне, почему это так.
Я читал, что использование методов функционального программирования может помочь облегчить некоторые из этих проблем, но я никогда не видел простого примера функционального кода, который бы работал одновременно. Итак, какие есть альтернативы использованию потоков? По крайней мере, какие есть способы абстрагировать их, чтобы вам не приходилось думать о таких вещах, как блокировка и о том, являются ли объекты конкретной библиотеки поточно-ориентированными.
Я знаю, что Google MapReduce должен помочь с этой проблемой, но я не видел краткого объяснения этого.
Хотя ниже я привожу конкретный пример, мне более любопытны общие приемы, чем решение этой конкретной проблемы (хотя использование примера для иллюстрации других приемов было бы полезно).
Я пришел к этому вопросу, когда написал простой веб-сканер в качестве учебного упражнения. Это работает довольно хорошо, но это медленно. Большая часть узких мест связана с загрузкой страниц. В настоящее время он является однопоточным и, следовательно, загружает только одну страницу за раз. Таким образом, если страницы можно загружать одновременно, это значительно ускорит процесс, даже если сканер будет работать на одном процессоре. Я решил использовать темы, чтобы решить проблему, но они меня пугают. Любые предложения о том, как добавить параллелизм к этому типу проблемы, не развязывая ужасный ночной кошмар?