SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
Model with actors and
implement with Akka
ITLC Hanoi, Oct 5 2015
Ngoc Dao
https://www.linkedin.com/in/ngocdaothanh
https://github.com/ngocdaothanh
https://github.com/xitrum-framework
https://github.com/netty
https://www.atlassian.com/software
Favorite languages: Ruby, Erlang, Scala
My Scala style: Use Scala as if
Scala =
Java (performance, libs eco) +
Ruby (human oriented syntax) +
Erlang (functional, reactive)
Interests:
● Realtime and distributed systems
● Multiplayer games
● Web frameworks (wrote several for Erlang, Scala, Java)
"Soon we had three kinds of Scala
written at Twitter: Scala written by
people who wished it was Ruby, Scala
written by people who wished it was
Java, and Scala written by people who
wished it was Haskell."
http://www.gigamonkeys.com/flowers/
https://youtu.be/sYsHK81MTHI
Schedule
● [What] Explain about actor model:
~¼ of time
● [How] Explain about how to create actors with
Akka library, via multiplayer chess demo:
~ ¾ of time
Level: Scala beginner
Please ask questions/discuss whenever you want
https://www.facebook.com/groups/720666194693928
net/ngocdaothanh/develop-realtime-web-
with-scala-and-xitrum
Xmas 2014
New year 2015
More photos:
Scala VN →
Photos →
Albums
http://scalamatsuri.org/
http://www.meetup.com/scalasyd/
https://github.com/scalasyd/scalasyd
● Your workplace, your school etc.
● Your background, your favorite languages
● Do you know Scala?
● Why do you want to learn Scala?
● How do you know about this meetup?
● What do you expect from this meetup?
● etc. etc.
Please introduce yourselves
Part 1/2:
[What] Actor model
Benefit of actors in one sentence
C/C++ vs Java:
You can use memory without having to release memory
manually.
Thread vs actor:
You can use concurrency without having to create threads and
sync vars manually.
Don't communicate by sharing memory;
share memory by communicating.
● Actor =
states +
mailbox +
behaviors (msg handlers)
● From outside, can’t manipulate actors directly.
● To interact with an actor, must send msgs to it.
● Each actor has a mailbox, msgs are put to mailbox, and
processed one by one. ← An actor is like a single
threaded process; it doesn’t do more than one thing at a
time.
http://www.cs.tsukuba.ac.
jp/~yas/cs/csys-2013/2013-12-
03/
Actor vs OOP
“The Actor model adopts the philosophy that everything is an actor. This is
similar to the everything is an object philosophy used by some object-oriented
programming languages, but differs in that object-oriented software is typically
executed sequentially, while the Actor model is inherently concurrent.”
https://en.wikipedia.org/wiki/Actor_model
● An actor is somewhat similar to an object
=> Easy to learn/model:
actor ~ object
method call ~ msg sending
● Scala supports both actors and OOP objects
(Erlang only supports actors)
Actor vs Thread
● Thread: n dimensions, hard to reason about.
● Actor: 1D, one thing at a time.
var1
var2
Actor vs Thread
Thread:
● Heavy weight: Can only create not too many threads;
usually: 2000~5000
● Shared state ← Source of bugs
● Passive: Have to call object.method() to make the object alive.
Actor:
● Light weight: Can create millions of actors;
usually: ~2.5 million actors/GB
● Self contained, shared nothing
● Active: Actors are alive by themselves. ← Easy to model programs that
have millions of on-going things (very high level of concurrency), like
MMOG games.
Just like JVM automatically manages memory for you, so
that you don’t have to care about releasing memory
manually:
● Actor is a high level logical way to think, to model
programs. You don’t have to care about managing
threads and syncing vars manually.
● At lower level, actors still run above a managed thread
pool.
Actor vs Thread
Actor vs Future
Actor:
● Reactive: messaging, scheduling
● FSM (Finite State Machine)
● Monitoring
● Supervision
● Location transparency
(actors on one server can send messages to actors on another server)
=> Easier to scale out to multiple servers/clustering
Future:
● Syntax is easier to write
● Composable: Run future A first, then B, then C etc.
● More typesafe (Akka 2.4.0 introduced “Akka Typed” feature)
Some actor pitfalls
Send mutable msgs between actors.
↑ May lead to bug, if actor A sends msg M to actor B, state
of B incorporates M, then M is later changed by A.
=> Shared memory
Fix: Use immutable messages.
From inside actor:
anObject.foo(new Callback {
def onCallback() {
// Modify actor state directly
}
})
↑ May lead to bug, because the actor’s thread and the callback’s thread may be
2 different threads. Remember: An actor is like a single threaded process, can’t
do more than one thing at a time. An actor should be self contained, shared
nothing.
Fix: self ! msgFromCallback
Useful links
● Concurrent Programming for Scalable Web
Architectures
http://berb.github.io/diploma-thesis/index.html
● Functions + Messages + Concurrency = Erlang
http://www.infoq.com/presentations/joe-armstrong-
erlang-qcon08
Part 2/2:
[How] Create actors with Akka
[Demo]
Multiplayer
web
chess game
http://akka.io/
Chess game
Simple spec, focus on chess logic:
● Web, multiplayer
● Standard chess, no variations (chess 960 etc.)
● No reconnection on network disconnection
● No time
● No game watching
● No chat
● No etc.
Useful links
Akka doc:
http://akka.io/docs/
Chess:
● UCI (Universal Chess Interface) protocol:
https://en.wikipedia.org/wiki/Universal_Chess_Interface
● Stockfish (world’s top open source UCI engine):
https://github.com/official-stockfish/Stockfish
● JStockfish (JNI wrapper):
https://github.com/ngocdaothanh/JStockfish
● Chessground (web UI):
https://github.com/ornicar/chessground
● Chess.js (JavaScript logic):
https://github.com/ornicar/chess.js
Chinese chess:
● UCCI (Universal Chinese Chess Interface) protocol:
http://www.xqbase.com/protocol/cchess_ucci.htm
● UCCI engines:
https://github.com/huygithub/hoxServer/tree/master/plugins

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Oslo.versioned objects - Deep Dive
Oslo.versioned objects - Deep DiveOslo.versioned objects - Deep Dive
Oslo.versioned objects - Deep Dive
 
Web development basics (Part-6)
Web development basics (Part-6)Web development basics (Part-6)
Web development basics (Part-6)
 
JavaScript Basics
JavaScript BasicsJavaScript Basics
JavaScript Basics
 
What's a macro?: Learning by Examples / Scalaのマクロに実用例から触れてみよう!
What's a macro?: Learning by Examples / Scalaのマクロに実用例から触れてみよう!What's a macro?: Learning by Examples / Scalaのマクロに実用例から触れてみよう!
What's a macro?: Learning by Examples / Scalaのマクロに実用例から触れてみよう!
 
Functional Programming in Clojure
Functional Programming in ClojureFunctional Programming in Clojure
Functional Programming in Clojure
 
Actor Patterns and NATS - Boulder Meetup
Actor Patterns and NATS - Boulder MeetupActor Patterns and NATS - Boulder Meetup
Actor Patterns and NATS - Boulder Meetup
 
jQuery (intermediate)
jQuery (intermediate)jQuery (intermediate)
jQuery (intermediate)
 
From Ruby to Scala
From Ruby to ScalaFrom Ruby to Scala
From Ruby to Scala
 
Invitation to the dark side of Ruby
Invitation to the dark side of RubyInvitation to the dark side of Ruby
Invitation to the dark side of Ruby
 
Hybrid concurrency patterns
Hybrid concurrency patternsHybrid concurrency patterns
Hybrid concurrency patterns
 
Develop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumDevelop realtime web with Scala and Xitrum
Develop realtime web with Scala and Xitrum
 
Maccro Strikes Back
Maccro Strikes BackMaccro Strikes Back
Maccro Strikes Back
 
JS Event Loop
JS Event LoopJS Event Loop
JS Event Loop
 
Reflection in Pharo: Beyond Smalltak
Reflection in Pharo: Beyond SmalltakReflection in Pharo: Beyond Smalltak
Reflection in Pharo: Beyond Smalltak
 
Functional Programming in JavaScript
Functional Programming in JavaScriptFunctional Programming in JavaScript
Functional Programming in JavaScript
 
Introduction to Scala language
Introduction to Scala languageIntroduction to Scala language
Introduction to Scala language
 
Web development basics (Part-4)
Web development basics (Part-4)Web development basics (Part-4)
Web development basics (Part-4)
 
Dynamically Composing Collection Operations through Collection Promises
Dynamically Composing Collection Operations through Collection PromisesDynamically Composing Collection Operations through Collection Promises
Dynamically Composing Collection Operations through Collection Promises
 
Scala the-good-parts
Scala the-good-partsScala the-good-parts
Scala the-good-parts
 
Continuations in scala (incomplete version)
Continuations in scala (incomplete version)Continuations in scala (incomplete version)
Continuations in scala (incomplete version)
 

Similar a Model with actors and implement with Akka

Similar a Model with actors and implement with Akka (20)

Akka actorstotherescue nirmalya sengupta
Akka actorstotherescue nirmalya senguptaAkka actorstotherescue nirmalya sengupta
Akka actorstotherescue nirmalya sengupta
 
Actor Model Akka Framework
Actor Model Akka FrameworkActor Model Akka Framework
Actor Model Akka Framework
 
Networks and Types - the Future of Akka @ ScalaDays NYC 2018
Networks and Types - the Future of Akka @ ScalaDays NYC 2018Networks and Types - the Future of Akka @ ScalaDays NYC 2018
Networks and Types - the Future of Akka @ ScalaDays NYC 2018
 
Rethinking the debugger
Rethinking the debuggerRethinking the debugger
Rethinking the debugger
 
Introduction to concurrent programming with akka actors
Introduction to concurrent programming with akka actorsIntroduction to concurrent programming with akka actors
Introduction to concurrent programming with akka actors
 
Introduction to concurrent programming with Akka actors
Introduction to concurrent programming with Akka actorsIntroduction to concurrent programming with Akka actors
Introduction to concurrent programming with Akka actors
 
RxJava@DAUG
RxJava@DAUGRxJava@DAUG
RxJava@DAUG
 
New c sharp4_features_part_vi
New c sharp4_features_part_viNew c sharp4_features_part_vi
New c sharp4_features_part_vi
 
Reactive Software Systems
Reactive Software SystemsReactive Software Systems
Reactive Software Systems
 
Actor Patterns and NATS - Boulder Meetup
Actor Patterns and NATS - Boulder MeetupActor Patterns and NATS - Boulder Meetup
Actor Patterns and NATS - Boulder Meetup
 
I know Java, why should I consider Clojure?
I know Java, why should I consider Clojure?I know Java, why should I consider Clojure?
I know Java, why should I consider Clojure?
 
New c sharp4_features_part_v
New c sharp4_features_part_vNew c sharp4_features_part_v
New c sharp4_features_part_v
 
Akka - young fighter course
Akka - young fighter courseAkka - young fighter course
Akka - young fighter course
 
Message Queues in Ruby - An Overview
Message Queues in Ruby - An OverviewMessage Queues in Ruby - An Overview
Message Queues in Ruby - An Overview
 
Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)
 
JavaScript
JavaScriptJavaScript
JavaScript
 
A first look into the Project Loom in Java
A first look into the Project Loom in JavaA first look into the Project Loom in Java
A first look into the Project Loom in Java
 
Scala
ScalaScala
Scala
 
Microservices in Scala: Play Framework
Microservices in Scala: Play FrameworkMicroservices in Scala: Play Framework
Microservices in Scala: Play Framework
 
FregeDay: Design and Implementation of the language (Ingo Wechsung)
FregeDay: Design and Implementation of the language (Ingo Wechsung)FregeDay: Design and Implementation of the language (Ingo Wechsung)
FregeDay: Design and Implementation of the language (Ingo Wechsung)
 

Más de Ngoc Dao

Xitrum HOWTOs
Xitrum HOWTOsXitrum HOWTOs
Xitrum HOWTOs
Ngoc Dao
 
Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013
Ngoc Dao
 
SockJS Intro
SockJS IntroSockJS Intro
SockJS Intro
Ngoc Dao
 
Easy distributed load test with Tsung
Easy distributed load test with TsungEasy distributed load test with Tsung
Easy distributed load test with Tsung
Ngoc Dao
 
Xitrum internals
Xitrum internalsXitrum internals
Xitrum internals
Ngoc Dao
 
Camellia General
Camellia GeneralCamellia General
Camellia General
Ngoc Dao
 
Nhập môn BDD
Nhập môn BDDNhập môn BDD
Nhập môn BDD
Ngoc Dao
 

Más de Ngoc Dao (20)

BIG DATA サービス と ツール
BIG DATA サービス と ツールBIG DATA サービス と ツール
BIG DATA サービス と ツール
 
How to write a web framework
How to write a web frameworkHow to write a web framework
How to write a web framework
 
Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014
 
Xitrum HOWTOs
Xitrum HOWTOsXitrum HOWTOs
Xitrum HOWTOs
 
Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013
 
SockJS Intro
SockJS IntroSockJS Intro
SockJS Intro
 
Easy distributed load test with Tsung
Easy distributed load test with TsungEasy distributed load test with Tsung
Easy distributed load test with Tsung
 
Cloud Erlang
Cloud ErlangCloud Erlang
Cloud Erlang
 
Xitrum internals
Xitrum internalsXitrum internals
Xitrum internals
 
Những lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNhững lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần application
 
Erlang Web
Erlang WebErlang Web
Erlang Web
 
Nitrogen Web Framework
Nitrogen Web FrameworkNitrogen Web Framework
Nitrogen Web Framework
 
スポイトができるまで
スポイトができるまでスポイトができるまで
スポイトができるまで
 
Camellia General
Camellia GeneralCamellia General
Camellia General
 
Nhập môn BDD
Nhập môn BDDNhập môn BDD
Nhập môn BDD
 
何でRuby
何でRuby何でRuby
何でRuby
 
Sinh hoat CLB tin hoc Komaba lan 2 - Phat bieu cua Ngoc
Sinh hoat CLB tin hoc Komaba lan 2 - Phat bieu cua NgocSinh hoat CLB tin hoc Komaba lan 2 - Phat bieu cua Ngoc
Sinh hoat CLB tin hoc Komaba lan 2 - Phat bieu cua Ngoc
 
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua G
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua GSinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua G
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua G
 
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Ngoc
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua NgocSinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Ngoc
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Ngoc
 
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Hung
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua HungSinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Hung
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Hung
 

Último

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 

Último (20)

Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 

Model with actors and implement with Akka

  • 1. Model with actors and implement with Akka ITLC Hanoi, Oct 5 2015 Ngoc Dao
  • 4. Favorite languages: Ruby, Erlang, Scala My Scala style: Use Scala as if Scala = Java (performance, libs eco) + Ruby (human oriented syntax) + Erlang (functional, reactive) Interests: ● Realtime and distributed systems ● Multiplayer games ● Web frameworks (wrote several for Erlang, Scala, Java) "Soon we had three kinds of Scala written at Twitter: Scala written by people who wished it was Ruby, Scala written by people who wished it was Java, and Scala written by people who wished it was Haskell." http://www.gigamonkeys.com/flowers/ https://youtu.be/sYsHK81MTHI
  • 5. Schedule ● [What] Explain about actor model: ~¼ of time ● [How] Explain about how to create actors with Akka library, via multiplayer chess demo: ~ ¾ of time Level: Scala beginner Please ask questions/discuss whenever you want
  • 10. ● Your workplace, your school etc. ● Your background, your favorite languages ● Do you know Scala? ● Why do you want to learn Scala? ● How do you know about this meetup? ● What do you expect from this meetup? ● etc. etc. Please introduce yourselves
  • 12. Benefit of actors in one sentence C/C++ vs Java: You can use memory without having to release memory manually. Thread vs actor: You can use concurrency without having to create threads and sync vars manually. Don't communicate by sharing memory; share memory by communicating.
  • 13. ● Actor = states + mailbox + behaviors (msg handlers) ● From outside, can’t manipulate actors directly. ● To interact with an actor, must send msgs to it. ● Each actor has a mailbox, msgs are put to mailbox, and processed one by one. ← An actor is like a single threaded process; it doesn’t do more than one thing at a time. http://www.cs.tsukuba.ac. jp/~yas/cs/csys-2013/2013-12- 03/
  • 14. Actor vs OOP “The Actor model adopts the philosophy that everything is an actor. This is similar to the everything is an object philosophy used by some object-oriented programming languages, but differs in that object-oriented software is typically executed sequentially, while the Actor model is inherently concurrent.” https://en.wikipedia.org/wiki/Actor_model ● An actor is somewhat similar to an object => Easy to learn/model: actor ~ object method call ~ msg sending ● Scala supports both actors and OOP objects (Erlang only supports actors)
  • 15. Actor vs Thread ● Thread: n dimensions, hard to reason about. ● Actor: 1D, one thing at a time. var1 var2
  • 16. Actor vs Thread Thread: ● Heavy weight: Can only create not too many threads; usually: 2000~5000 ● Shared state ← Source of bugs ● Passive: Have to call object.method() to make the object alive. Actor: ● Light weight: Can create millions of actors; usually: ~2.5 million actors/GB ● Self contained, shared nothing ● Active: Actors are alive by themselves. ← Easy to model programs that have millions of on-going things (very high level of concurrency), like MMOG games.
  • 17. Just like JVM automatically manages memory for you, so that you don’t have to care about releasing memory manually: ● Actor is a high level logical way to think, to model programs. You don’t have to care about managing threads and syncing vars manually. ● At lower level, actors still run above a managed thread pool. Actor vs Thread
  • 18. Actor vs Future Actor: ● Reactive: messaging, scheduling ● FSM (Finite State Machine) ● Monitoring ● Supervision ● Location transparency (actors on one server can send messages to actors on another server) => Easier to scale out to multiple servers/clustering Future: ● Syntax is easier to write ● Composable: Run future A first, then B, then C etc. ● More typesafe (Akka 2.4.0 introduced “Akka Typed” feature)
  • 19. Some actor pitfalls Send mutable msgs between actors. ↑ May lead to bug, if actor A sends msg M to actor B, state of B incorporates M, then M is later changed by A. => Shared memory Fix: Use immutable messages.
  • 20. From inside actor: anObject.foo(new Callback { def onCallback() { // Modify actor state directly } }) ↑ May lead to bug, because the actor’s thread and the callback’s thread may be 2 different threads. Remember: An actor is like a single threaded process, can’t do more than one thing at a time. An actor should be self contained, shared nothing. Fix: self ! msgFromCallback
  • 21. Useful links ● Concurrent Programming for Scalable Web Architectures http://berb.github.io/diploma-thesis/index.html ● Functions + Messages + Concurrency = Erlang http://www.infoq.com/presentations/joe-armstrong- erlang-qcon08
  • 22. Part 2/2: [How] Create actors with Akka [Demo] Multiplayer web chess game
  • 24. Chess game Simple spec, focus on chess logic: ● Web, multiplayer ● Standard chess, no variations (chess 960 etc.) ● No reconnection on network disconnection ● No time ● No game watching ● No chat ● No etc.
  • 25. Useful links Akka doc: http://akka.io/docs/ Chess: ● UCI (Universal Chess Interface) protocol: https://en.wikipedia.org/wiki/Universal_Chess_Interface ● Stockfish (world’s top open source UCI engine): https://github.com/official-stockfish/Stockfish ● JStockfish (JNI wrapper): https://github.com/ngocdaothanh/JStockfish ● Chessground (web UI): https://github.com/ornicar/chessground ● Chess.js (JavaScript logic): https://github.com/ornicar/chess.js Chinese chess: ● UCCI (Universal Chinese Chess Interface) protocol: http://www.xqbase.com/protocol/cchess_ucci.htm ● UCCI engines: https://github.com/huygithub/hoxServer/tree/master/plugins