Przeczytałem, że język Io ma Futures
, który może wykryć zakleszczenie automatyczne. Nic o tym nie wiem i widziałem jakąś składnię. W jaki sposób język Io wykrywa zakleszczenia?W jaki sposób język Io wykrywa zakleszczenie automatyczne?
Odpowiedz
Io zgłasza wyjątek w przypadku wystąpienia impasu.
ref: a post od Wierzę Steve Dekorte na lang.lightweight. Wiadomość wklejona poniżej:
Io ma kontynuację w postaci asynchronicznych wiadomości i kontraktów terminowych. Przykład:
aFuture = obj @foo
// the @ means "perform message foo asynchronously"
// that is, in a light weight thread owned by obj
// The aFuture's value ivar is set with the result
result = aFuture value
// This causes the current light weight thread to pause
// until the aFuture's vale is set.
// So this is effectively a continuation.
// another option is:
obj @(foo) sendResultTo(target, "foobar")
// which is more like the callcc style
Interesującą rzeczą w tym stylu użytku jest to, że nikt nie trudno zrozumieć. Ponadto Io używa kontraktów terminowych do automatycznego wykrywania zakleszczeń. Gdy dojdzie do impasu, powstaje wyjątek zamiast go zezwalać.
NB. Powyższy post pochodzi z 2003 roku, więc nastąpiły pewne zmiany. Zapoznaj się z najnowszą dokumentacją online Concurrency
, aby uzyskać najnowsze informacje.
Aktualizacja - A od online documentation ona mówi:
Auto Deadlock Detection
Zaletą stosowania przyszłość jest to, że gdy w przyszłości wymaga czekać, będzie to sprawdzić aby sprawdzić, czy wstrzymanie oczekiwania na wynik spowodowałoby zakleszczenie, a jeśli tak, uniknij zakleszczenia i wywołaj wyjątek. Wykonuje tę kontrolę, przeglądając listę powiązanych kontraktów futures.
Awesome, just awesome. –
Każda przyszłość wie, na który aktor czeka, a każdy aktor wie, na którą przyszłość czeka (jeśli jest), więc Io po prostu podchodzi do tego łańcucha, aby sprawdzić, czy obecny aktor jest w nim. Jeśli tak, nastąpi impas. Jeśli nie, nie ma.
Jak to się ma do problemu zatrzymania? Czy wykrywanie zakleszczenia nie jest w stanie zobaczyć, kiedy się zatrzyma? Czy jest to podzbiór, który zawsze można zidentyfikować? – Sebastian