Od jakiegoś czasu obserwuję rosnącą widoczność funkcjonalnych języków programowania i funkcji. Zajrzałem do nich i nie widziałem powodu odwołania.
Niedawno byłem na prezentacji Kevina Smitha „Basics of Erlang” w Codemash .
Podobała mi się prezentacja i dowiedziałem się, że wiele atrybutów programowania funkcjonalnego znacznie ułatwia unikanie problemów z wątkami / współbieżnością. Rozumiem, że brak stanu i zmienności uniemożliwia wielu wątkom zmianę tych samych danych, ale Kevin powiedział (jeśli dobrze zrozumiałem) cała komunikacja odbywa się za pośrednictwem wiadomości, a wiadomości są przetwarzane synchronicznie (ponownie unikając problemów z współbieżnością).
Ale przeczytałem, że Erlang jest używany w wysoce skalowalnych aplikacjach (przez cały powód, dla którego Ericsson go stworzył). Jak efektywnie obsługiwać tysiące żądań na sekundę, jeśli wszystko jest obsługiwane jako synchronicznie przetwarzana wiadomość? Czy to nie jest powód, dla którego zaczęliśmy przechodzić w kierunku przetwarzania asynchronicznego - abyśmy mogli skorzystać z wielu wątków operacji w tym samym czasie i osiągnąć skalowalność? Wygląda na to, że ta architektura, choć bezpieczniejsza, jest krokiem wstecz pod względem skalowalności. czego mi brakuje?
Rozumiem, że twórcy Erlanga celowo unikali obsługi wątków, aby uniknąć problemów ze współbieżnością, ale uważałem, że wielowątkowość jest niezbędna do osiągnięcia skalowalności.
W jaki sposób funkcjonalne języki programowania mogą być z natury bezpieczne dla wątków, a jednocześnie nadal skalować?