Lecture 22: Abstractions for Concurrency

advertisement
Lecture 22:
Abstractions for
Concurrency
When you have a world-wide tuple space, you’ll be able
to tune it in from any computer anywhere – or from any
quasi-computer: any cell phone, any TV, any toaster.
David Gelernter’s introduction to
JavaSpaces Principles, Patterns, and Practice.
CS655: Programming Languages
David Evans
University of Virginia
http://www.cs.virginia.edu/~evans
Computer Science
Menu
• Form going around
– Signup for Project Presentations
– Vote for Next Lecture (no cheating!)
• Abstractions for Concurrency
– Algol 68
– Monitors
– Linda and JavaSpaces
17 April 2001
CS 655: Lecture 21
2
Last Time
• Concurrent programming is programming
with partial ordering on time
• A concurrent programming language gives
programmers mechanisms for expressing
that partial order
• We can express many partial orders using
the thread control primitives fork and join
and locking primitives protect, acquire
and release.
17 April 2001
CS 655: Lecture 21
3
Abstractions
• Programming at that low level would be
a pain – are there better abstractions?
– Hundreds of attempts...we’ll see a few
today.
• Issues
fork
– Thread creation
– Thread synchronization join
protect, acquire, release
– Resource contention
17 April 2001
CS 655: Lecture 21
4
Algol 68: Collateral Clauses
• Collateral Clauses
stmt0; (stmt1, stmt2) stmt3;
Defines a partial order:
stmt0
stmt1
stmt2
stmt3
17 April 2001
CS 655: Lecture 21
5
Algol 68: Semaphores
• Dijkstra, “Cooperating Sequential
Processes”
• type sema
up – increments
down – decrements (must > 0 before)
17 April 2001
CS 655: Lecture 21
6
Semaphore Example
begin sema mutex := level 1;
proc producer
while not finished
do down mutex
... insert item
up mutex
od;
17 April 2001
CS 655: Lecture 21
7
Semaphore Example, cont.
proc consumer
while not finished
do down mutex
... remove item
up mutex
od;
par (producer, consumer)
// start them in parallel
17 April 2001
CS 655: Lecture 21
8
What can go wrong?
• Programmer neglects to up semaphore
• Programmer neglects to down
semaphore before accessing shared
resource
• Programmer spends all her time
worrying about up and down instead of
the algorithm
17 April 2001
CS 655: Lecture 21
9
Monitors
• Concurrent Pascal [Hansen 74], Modula
[Wirth 77], Mesa [Lampson80]
• Integrated data abstraction and resource
synchronization
• Routines that use a shared resource
grouped in a monitor, accesses only
allowed through exported procedures
• Conditions can control when threads
may execute exported procedures
17 April 2001
CS 655: Lecture 21
10
Monitor Example
monitor boundedbuffer
buffer: array 0..N-1 of int;
count: 0..N;
nonempty, nonfull: condition;
procedure append (x: int)
if count = N then nonfull.wait;
buffer[count] := x; count := count + 1;
nonempty.signal
end append
Example adapted from [Hansen93]
17 April 2001
CS 655: Lecture 21
11
Monitor Example, cont.
procedure remove () returns portion
if count = 0 then nonempty.wait;
x := ...
nonfull.signal
end remove;
17 April 2001
CS 655: Lecture 21
12
Java Synchronization
• synchronized method qualifier
– Once a synchronized method begins
execution, it will complete before any other
thread enters a method of the same object
– Run-time must associate a lock with every
object
• Is this enough to implement a
semaphore?
• Is this better/worse than monitors?
17 April 2001
CS 655: Lecture 21
13
Synchronized Example
class ProducerConsumer {
private int x = 1;
synchronized void produce ()
{ x = x + 1; }
synchronized void consume ()
{ x = x – 1; }
}
17 April 2001
How could we require x stay positive?
CS 655: Lecture 21
14
Linda
• Program Concurrency by using
uncoupled processes with shared data
space
• Add concurrency into a sequential
language by adding:
– Simple operators
– Runtime kernel (language-independent)
– Preprocessor (or compiler)
17 April 2001
CS 655: Lecture 21
15
Design by Taking Away
• Backus: von Neumann bottleneck results
from having a store
– Remove the store  Functional Languages
• Gelernter: distributed programming is hard
because of inter-process scheduling and
communication due to order of mutation
– We don’t have to remove the store, just mutation
– Remove mutation  read-and-remove only store
 tuple spaces
17 April 2001
CS 655: Lecture 21
16
Basic Idea
• Have a shared space (“tuple space”)
– Processes can add, read, and take away
values from this space
• Bag of processes, each looks for work it
can do by matching values in the tuple
space
• Get load balancing, synchronization,
messaging, etc. for free!
17 April 2001
CS 655: Lecture 21
17
Tuples
Conventional
Memory
Linda/JavaSpaces
Unit
Bit
Logical Tuple
(23, “test”, false)
Access Using
Address (variable)
Selection of values
Operations
read, write
read, add, remove
JavaSpaces:
read, write, take
immutable
17 April 2001
CS 655: Lecture 21
18
Tuple Space Operations
• out (t) – add tuple t to tuple space
• take (s)  t – returns and removes
tuple t matching template s
• read (s)  t – same as in, except
doesn’t remove t.
• Operations are atomic (even if space is
distributed)
17 April 2001
CS 655: Lecture 21
19
Meaning of take
take (“f”, int n)
Tuple Space
take (“f”, 23)
(“f”, 23)
take (“t”, bool b, int n)
(“t”, 25)
(“t”, true)
(“t”, false)
take (string s, int n)
(“f”, 17)
take (“cookie”)
17 April 2001
CS 655: Lecture 21
20
Operational Semantics
• Extend configurations with a tuple space (just
a bag of tuples)
• Transition rule for out:
– Just add an entry to the tuple space
• Transition rule for take:
– If there is a match (ignoring binding):
• Remove it from the tuple space
• Advance the thread
– Similar to join last time – it just waits if there is no
match
17 April 2001
CS 655: Lecture 21
21
Shared Assignment
Loc := Expression
take (“Loc”, formal loc_value);
out (“Loc”, Expression);
e.g.:
x := x + 1;
 take (“x”, formal x_value)
out (“x”, x_value + 1);
17 April 2001
CS 655: Lecture 21
22
Semaphore
• Create (int n, String resource)
for (i = 0; i < n; i++) out (resource);
• Down (String resource)
take (resource)
• Up (String resource)
out (resource)
17 April 2001
CS 655: Lecture 21
23
Distributed Ebay
• Offer Item (String item, int minbid, int time):
out (item, minbid, “owner”);
sleep (time);
take (item, formal bid, formal bidder);
if (bidder  “owner”) SOLD!
• Bid (String bidder, String item, int bid):
take (item, formal highbid, formal highbidder);
if (bid > highbid) out (item, bid, bidder)
else out (item, highbid, highbidder)
How could a bidder cheat?
17 April 2001
CS 655: Lecture 21
24
Factorial
Setup:
for (int i = 1; i <= n; i++) out (i);
start FactTask (replicated n-1 times)
FactTask:
take (int i); take (int j); out (i * j);
What if last two elements are taken concurrently?
Eventually, tuple space contains one
entry which is the answer.
Better way to order Setup?
17 April 2001
CS 655: Lecture 21
25
Finishing Factorial
Setup:
for (int i = 1; i <= n; i++) out (i);
out (“workleft”, n - 1);
take (“workleft”, 0);
take (result);
FactTask:
take (“workleft”, formal w);
if (w > 0)
take (int i); take (int j); out (i * j);
out (“workleft”, w – 1);
endif;
Opps – we’ve sequentialized it!
17 April 2001
CS 655: Lecture 21
26
Concurrent Finishing Factorial
Setup:
start FactWorker (replicated n-1 times)
out (“done”, 0);
for (int i = 1; i <= n; i++) {
out (i); if i > 1 out (“work”); }
take (“done”, n-1);
take (result);
FactWorker:
take (“work”);
take (formal int i); take (formal int j); out (i * j);
take (“done”, formal int n); out (“done”, n + 1);
17 April 2001
CS 655: Lecture 21
27
Sorting in Linda
• Problem: Sorting an array of n integers
• Initial tuple state: (“A”, [A[0], ..., A[n-1]])
• Final tuple state: (“A”, [A’[0], ..., A’[n-1]])
such A’ has a corresponding element for every
element in A, and
for all 0 <= j < k <= n-1, A’[j] <= A’[k].
• Task: Devise a Linda sorting program and
analyze its performance (can you match
MergeSort?)
17 April 2001
CS 655: Lecture 21
28
Summary
• Linda/JavaSpaces provides a simple, but
powerful model for distributed computing
• JavaSpaces extends Linda with:
– Leases (tuples that expire after a time limit)
• Implementing an efficient, scalable tuple
space (that provides the correct global
semantics) is hard; people have designed
custom hardware to do this.
17 April 2001
CS 655: Lecture 21
29
Charge
• You can download JavaSpaces
implementation from:
http://java.sun.com/products/javaspaces/
• Project presentations for next week –
advice for them Thursday
• Projects are due 2 weeks from today
17 April 2001
CS 655: Lecture 21
30
Download