Ja myslim, ze hlavni vlakno neblokuje, ale sada aktoru sdili jedno vlakno - muze tedy blokovat jine aktory. Future, co jsem alespon cetl, se moc nedoporucuje a lepsi je pouzivat docasne actory (pripadne v jinem thread poolu blokujici aktory).
Nejvetsi rozdil oproti ostatnim pristupu jeto rozdeleni dat mezi aktory - zadny (nebo minimalni) globalni stav.
Řekl bych, že v téhle oblasti se ty pojmy dost melou a těžko se dá říct něco, co by bylo úplně zjevná ověřitelná pravda
Ideální stav je samozřejmě takový, jaký má Erlang, jak jinak
- každý actor může mít bez problému vlastní (zelené) vlákno a zároveň jich nemůže mít víc. I tak se ale nedá vyhnout tomu, že actor, který čeká na nějakou externí událost (EDIT: nemusí být ani externí, stačí nekonečný výpočet nebo cyklus vzájemných čekání), může blokovat další actory. Čistě proto, že čekají na zprávu od něj. Pokud čekají synchronně (blokovaně) a bez timeoutu, je z toho deadlock. Pokud s timeoutem, je potřeba nějak ošetřit chybový stav. Pokud čekají asynchronně, je to relativně ok, ale vyžaduje to neúměrné množství logiky kolem zjišťování, na co všechno vlastně ještě čekám, jak dlouho na to mám čekat, co mám udělat, až se to stane atd., takže tohle se uvnitř actoru prakticky vůbec nepoužívá, pokud ta funkcionalita není ze své podstaty asynchronní (není svázaná s žádným stavem, proto si k ní nemusím nic pamatovat, jenom ji odpálím a až přijde odpověď, tak na ni reaguju pořád stejně).
Takže shrnuto podtrženo, ani v (reálně dosažitelném) ideálním stavu nemůžu mít žádné silné garance o tom, že nedojde ke stavu, který si moc nepřeju (deadlock nebo chyba). Čili pokud actory poháním nějakým poolem threadů, může to (imho) fungovat docela dobře, pokud je to dobře navržené a dobře dimenzované.
Typicky i v té první "ideální" situaci chci mít věci, které můžou blokovat, uzavřené do samostatného actoru, takže pokud je tohle řešení doporučované[1] v Akka, není to žádná velká ostuda
[1]
http://doc.akka.io/docs/akka/snapshot/general/actor-systems.html#Blocking_Needs_Careful_Management