Потоки обрабатывают данные постепенно, порциями, а не загружают всё в память сразу. Это делает их необходимыми для больших данных (большие файлы, сетевые передачи), где буферизация всего исчерпала бы память.
Проблема, которую решают потоки
data = fs..();
(data);
fs.()
.(transform)
.(fs.());
