Bartosz Sypytkowski
b.sypytkowski@gmail.com
@Horusiath
Prawo Moore'a przestało obowiązywać od 2011 roku
Współdzielenie danych
Zakleszczenia wątków
Zarządzanie błędami
Komunikacja między maszynami
Debugowanie
Testowanie
Wnioskowanie
Don't communicate by sharing, share by communicating
Brak współdzielonego stanu
Lekkie procesy
Asynchroniczna wymiana komunikatów
Kolejki do buforowania nadchodzących wiadomości
Telekomunikacja
Gry i multimedia
Giełda i finanse
Symulacje
Data mining
Systemy o dużym natężeniu ruchu
class HelloActor : ReceiveActor
{
public HelloActor()
{
Receive<string>(s => Console.WriteLine(s));
}
}
using (ActorSystem system = ActorSystem.Create("sys"))
{
ActorRef aref = system.ActorOf(Props.Create<HelloActor>(), "hello");
aref.Tell("Hello world");
}
Nie wiesz co robić? Zapytaj szefa
class Parent : ReceiveActor
{
private readonly ActorRef child;
public Parent()
{
child = Context.ActorOf(Props.Create<Child>());
ReceiveAny(msg => child.Forward(msg));
}
protected override SupervisorStrategy SupervisorStrategy()
{
return new OneForOneStrategy(exc =>
exc is MyBusinessException
? Directive.Restart
: Akka.Actor.SupervisorStrategy.DefaultDecider(exc));
}
}
class Child : ReceiveActor
{
public Child()
{
ReceiveAny(msg => Sender.Tell(msg));
}
}
akka://system/user/my-actor
akka.tcp://system@localhost:666/user/my-actor
Adresowanie lokalne
Adresowanie globalne
Routing
Mailboxes
Dispatchers
Schedulers
Event Bus
Logging
Monitorowanie
Finite State Machines
Dependency Injection
Stashing
Serializacja
Testing support
Routing
Mailboxes
Dispatchers
Schedulers
Event Bus
Logging
Config config = FluentConfig.Begin().StartRemotingOn("localhost", 0).Build();
using (ActorSystem system = ActorSystem.Create("sys", config))
{
var remoteAddress = Address.Parse("akka.tcp://remoteSys@localhost:9000/");
ActorRef aref = system.ActorOf(
Props.Create<HelloActor>()
.WithDeploy(new Deploy(new RemoteScope(remoteAddress))),
"hello");
aref.Tell("Hello world");
}
Klient
Config config = FluentConfig.Begin().StartRemotingOn("localhost", 9000).Build();
using (ActorSystem system = ActorSystem.Create("remoteSys", config))
{
}
Serwer
... i nie tylko
Odmienne podejście do rozwiązywania problemów
Współpraca z TPL
Zaawansowane opcje konfiguracji
With great power comes great responsibility
- Uncle Ben, Spiderman