Poczytaj mi Clojure, cz.  19


Współbieżność: Wątki


Grafika

Korzystanie z dodatkowych wątków i sterowanie wykonywaniem bieżącego pozwalają precyzyjnie zarządzać współbieżnym realizowaniem zadań. W Clojure możemy w tym celu użyć dodatkowych typów referencyjnych: Future, Promise i Delay. Istnieją również odpowiednie klasy Javy realizujące podobne cele, a nawet typ Volatile, który pozwala tworzyć szybkie choć niebezpieczne odpowiedniki zmiennych.

Poczytaj mi Clojure, cz.  18


Współbieżność: Referencje


Grafika

Ref to typ referencyjny, dzięki któremu można wyrażać częste i jednoczesne zmiany stanów wielu współdzielonych tożsamości w synchroniczny sposób. Wykorzystywany jest tam, gdzie kilka wartości wskazywanych przez referencje zależy od siebie i modyfikacja ich wszystkich powinna być atomowa (np. przekazywanie środków między rachunkami bankowymi). Do obsługi Refów intensywnie wykorzystywana jest programowa pamięć transakcyjna (STM).

Poczytaj mi Clojure, cz.  17


Współbieżność: Agenty


Grafika

Agent to typ referencyjny podobny do Atomu. Pozwala wyrażać częste, niekoordynowane zmiany stanów współdzielonych tożsamości w asynchroniczny sposób. Wykorzystywany bywa na przykład do obsługi niezależnych zdarzeń bądź jednokierunkowej komunikacji między komponentami realizującymi dostęp do pewnego zasobu, jak np. równoległe pobieranie danych z sieci, zapis do pliku przez wiele wątków itp.

Poczytaj mi Clojure, cz.  16


Współbieżność: Atomy


Grafika

Atom to typ referencyjny przeznaczony do obsługi danych przetwarzanych współbieżnie, do których wymagany jest niekoordynowany, synchroniczny dostęp. Możemy dzięki niemu tworzyć współdzielone obiekty wyrażające zmieniające się stany, gdy zależy nam na tym, aby podczas zmiany wartości bieżącej uwzględniona była jej poprzednia wartość, chociaż dopuszczamy drobne zmiany w kolejności operacji, gdy więcej niż jedna aktualizacja zostanie zlecona w podobnym czasie.

Poczytaj mi Clojure, cz.  15


Współbieżność


Grafika

Wykonywanie współbieżne pozwala spożytkować więcej niż jedną jednostkę obliczeniową komputera podczas wykonywania zadań, które można zrównoleglić. Pomaga też lepiej zarządzać czasem, gdy pewne operacje muszą oczekiwać na obsługę komunikacji międzyprocesowej lub podsystemu wejścia/wyjścia. Clojure proponuje przejrzystą implementację wykonywania współbieżnego, wykorzystującą typy referencyjne i programową pamięć transakcyjną.