Dopóki będziesz pisać programy ściśle sekwencyjne (wykonaj A, następnie B, a następnie C; zakończone!) nie masz problemów z współbieżnością, a mechanizmy współbieżności języka pozostają nieistotne .
Po przejściu z programów "programowanie ćwiczeń" do rzeczy rzeczywistych, dość szybko napotkasz problemy, których rozwiązaniem jest wielowątkowość (lub jakikolwiek aromat współbieżności, który masz dostępny).
Przypadek: Programy z GUI. Załóżmy, że piszesz edytor z sprawdzaniem pisowni. Chcesz, aby moduł sprawdzania pisowni działał cicho w tle, ale chcesz, aby interfejs graficzny płynnie akceptował dane wprowadzane przez użytkownika. Więc uruchamiasz te dwie czynności jako oddzielne wątki.
Przypadek: Ostatnio napisałem program (do pracy), który zbiera statystyki z dwóch plików dziennika i zapisuje je w bazie danych. Każdy plik trwa około 3 minut. Przeniosłem te procesy na dwa wątki, które biegną obok siebie, skracając całkowity czas przetwarzania z 6 minut do nieco ponad 3.
Przypadek: oprogramowanie do symulacji naukowej/inżynierskiej. Istnieje wiele problemów, które rozwiązuje się, obliczając pewien efekt (na przykład przepływ ciepła) w każdym punkcie trójwymiarowej siatki reprezentującej badany obiekt (jądro gwiazdy, wybuch jądrowy, rozproszenie geograficzne populacji owadów ...). Zasadniczo to samo obliczenie jest wykonywane w każdym punkcie i przy wielu punktach, więc rozsądnie jest je wykonywać równolegle.
We wszystkich tych przypadkach i wielu innych, ilekroć dwa procesy obliczeniowe uzyskują dostęp do tej samej pamięci (= zmiennych, jeśli chcesz) mniej więcej w tym samym czasie, istnieje możliwość ich wzajemnego zakłócania i zakłócania pracy nawzajem. Ogromna gałąź informatyki, która zajmuje się "programowaniem współbieżnym", zajmuje się pomysłami, jak rozwiązać ten problem.
Dogodnie przydatną dyskusję rozpoczynającą ten temat można znaleźć pod adresem in Wikipedia.
Kim jest "ktoś"? Czy mógłbyś podać przykład? Nie sądzę, żeby istniała jakakolwiek "osoba, która dzieli się moimi przedmiotami ze mną. Może powinienem sprawdzić pod łóżkiem. –
* ktoś * jest po prostu kolejnym kawałkiem kodu, w innym wątku, uzyskującym dostęp do tego obiektu. –
Czasami jest szybsze, czasami wolniej - jak większość optymalizacji, które są wykonywane bez pomiaru. Czasami to dobrze, a czasami te zamki byłyby lepsze. Dlatego nazywamy nas inżynierami oprogramowania **. – Eloff