•shared-memory concurrent model
•locks
•transactional memory
•message-passing concurrent model
Friday, September 21, 2012
Slide 102
Slide 102 text
server = lambda do |i|
receive
when :increment
server.(i+1)
when :check
client <- i
server.(i)
else
warn "unknown message"
server.(i)
end
end
server.(0)
Friday, September 21, 2012
Slide 103
Slide 103 text
thread {
server <- :increment
}
Friday, September 21, 2012
Slide 104
Slide 104 text
thread 1 server thread 2
Friday, September 21, 2012
Slide 105
Slide 105 text
thread 1 server thread 2
0
Friday, September 21, 2012
Slide 106
Slide 106 text
thread 1 server thread 2
0
:increment
Friday, September 21, 2012
Slide 107
Slide 107 text
thread 1 server thread 2
0
1
:increment
Friday, September 21, 2012
Slide 108
Slide 108 text
thread 1 server thread 2
0
1
:increment
:increment
Friday, September 21, 2012
Slide 109
Slide 109 text
thread 1 server thread 2
0
2
1
:increment
:increment
Friday, September 21, 2012
Slide 110
Slide 110 text
thread 1 server thread 2
0
2
1
:increment
:increment
:increment
Friday, September 21, 2012
Slide 111
Slide 111 text
thread 1 server thread 2
0
2
1
3
:increment
:increment
:increment
Friday, September 21, 2012
Slide 112
Slide 112 text
thread 1 server thread 2
0
2
1
3
:increment
:increment
:increment
:check
Friday, September 21, 2012
Slide 113
Slide 113 text
thread 1 server thread 2
0
2
1
3
3
:increment
:increment
:increment
:check
Friday, September 21, 2012
Slide 114
Slide 114 text
thread 1 server thread 2
0
2
1
3
3
:increment
:increment
:increment
:check
Friday, September 21, 2012
Slide 115
Slide 115 text
thread 1 server thread 2
0
2
1
3
3
3
:increment
:increment
:increment
:check
Friday, September 21, 2012
Slide 116
Slide 116 text
“Do not communicate by
sharing memory;
instead, share memory
by communicating;”
Effective Go
Friday, September 21, 2012
Slide 117
Slide 117 text
+no need for synchronization
+easy to distribute (location
transparency)
Friday, September 21, 2012
Slide 118
Slide 118 text
- coordination may be tricky
- non-conventional approach
Friday, September 21, 2012
Slide 119
Slide 119 text
UP
SUMMING
Friday, September 21, 2012
Slide 120
Slide 120 text
message-passing
locks
stm
go, erlang
ruby
clojure
dataflow oz
Friday, September 21, 2012
Slide 121
Slide 121 text
github.com/celluloid
Friday, September 21, 2012
Slide 122
Slide 122 text
@elixirlang / elixir-lang.org
Friday, September 21, 2012
Slide 123
Slide 123 text
MATTER
DEFAULTS
Friday, September 21, 2012
Slide 124
Slide 124 text
Erlang and Clojure
defaults to immutable
Friday, September 21, 2012
Slide 125
Slide 125 text
MAGIC BULLET
THERE IS NO
Friday, September 21, 2012
Slide 126
Slide 126 text
REFERENCES
Seven languages in seven weeks
Friday, September 21, 2012
Slide 127
Slide 127 text
REFERENCES
Concepts, Techniques and Models
of Computer Programming
Friday, September 21, 2012
Slide 128
Slide 128 text
REFERENCES
Software Transactional Memory
http://java.ociweb.com/mark/stm/article.html
Persistent Data Structures
http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey
Friday, September 21, 2012