Moje pytanie: jaki rodzaj aplikacji wymaga tak wielu jednoczesnych wątków wykonania?
1) Fakt, że język „skaluje się” oznacza, że istnieje mniejsze prawdopodobieństwo, że będziesz musiał rzucić ten język, gdy sytuacja stanie się bardziej skomplikowana. (Jest to tak zwana koncepcja „całego produktu”). Wiele osób porzuca Apache dla Nginx z tego właśnie powodu. Jeśli zbliżysz się do „twardego limitu” narzuconego przez nadmiar wątku, przestraszysz się i zaczniesz zastanawiać się, jak go ominąć. Strony internetowe nigdy nie są w stanie przewidzieć, jaki ruch uzyskają, więc rozsądne jest poświęcenie trochę czasu na skalowanie.
2) Jeden goroutine na żądanie to dopiero początek. Istnieje wiele powodów, aby używać goroutines wewnętrznie.
- Rozważ aplikację internetową z równoczesnymi żądaniami 100, ale każde żądanie generuje 100 żądań zaplecza. Oczywistym przykładem jest agregator wyszukiwarek. Ale prawie każda aplikacja może tworzyć goroutiny dla każdego „obszaru” na ekranie, a następnie generować je niezależnie zamiast sekwencyjnie. Na przykład każda strona w Amazon.com składa się z ponad 150 żądań zaplecza, przygotowanych specjalnie dla Ciebie. Nie zauważasz, ponieważ są one równoległe, a nie sekwencyjne, a każdy „obszar” to jego własny serwis internetowy.
- Zastanów się nad każdą aplikacją, w której niezawodność i opóźnienia są najważniejsze. Prawdopodobnie chcesz, aby każde przychodzące żądanie uruchomiło kilka żądań zaplecza i zwróciło dane, które pojawią się jako pierwsze .
- Rozważ każde „dołączenie do klienta” wykonane w Twojej aplikacji. Zamiast mówić „dla każdego elementu, uzyskaj dane”, możesz wydzielić garść goroutine. Jeśli masz kilka podrzędnych baz danych do zapytania, magicznie pójdziesz N czas szybciej. Jeśli tego nie zrobisz, nie będzie wolniej.
trafienia maleją, gdy liczba wątków / procesów jest znacznie większa niż liczba rdzeni fizycznych
Wydajność nie jest jedynym powodem podziału programu na CSP . W rzeczywistości może to ułatwić zrozumienie programu, a niektóre problemy można rozwiązać za pomocą znacznie mniejszej ilości kodu.
Tak jak na pokazanych powyżej slajdach, współbieżność w kodzie jest sposobem na uporządkowanie problemu. Brak goroutin jest jak brak struktury danych Map / Dictonary / Hash w twoim języku. Bez tego możesz sobie poradzić. Ale kiedy już go masz, zaczynasz go używać wszędzie i to naprawdę upraszcza twój program.
W przeszłości oznaczało to „rozwijanie własnego” programowania wielowątkowego. Ale to było skomplikowane i niebezpieczne - wciąż nie ma wielu narzędzi, aby upewnić się, że nie tworzysz ras. Jak zapobiegać błędom przyszłego opiekuna? Jeśli spojrzysz na duże / złożone programy, zobaczysz, że wydają one dużo zasobów w tym kierunku.
Ponieważ współbieżność nie jest pierwszorzędną częścią większości języków, dzisiejsi programiści nie dostrzegają, dlaczego byłoby to dla nich przydatne. Stanie się to bardziej widoczne, gdy każdy telefon i zegarek zbliżą się do 1000 rdzeni. Idź na statki z wbudowanym narzędziem do wykrywania wyścigów.