Download presentation
Presentation is loading. Please wait.
Published byGwenda Shelton Modified over 9 years ago
1
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science Computer Systems Principles Concurrency Patterns Emery Berger and Mark Corner University of Massachusetts Amherst
2
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science http://server/Easter-bunny/ 200x100/75.jpg not found client web server Web Server Client (browser) –Requests HTML, images Server –Caches requests –Sends to client
3
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 3 Possible Implementation while (true) { wait for connection; read from socket & parse URL; look up URL contents in cache; if (!in cache) { fetch from disk / execute CGI; put in cache; } send data to client; }
4
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 4 Possible Implementation while (true) { wait for connection; // net read from socket & parse URL; // cpu look up URL contents in cache; // cpu if (!in cache) { fetch from disk / execute CGI;//disk put in cache; // cpu } send data to client; // net }
5
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science clients web server Problem: Concurrency Sequential fine until: –More clients –Bigger server Multicores, multiprocessors Goals: –Hide latency of I/O Don’t keep clients waiting –Improve throughput Serve up more pages
6
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 6 Building Concurrent Apps Patterns / Architectures –Thread pools –Producer-consumer –“Bag of tasks” –Worker threads (work stealing) Goals: –Minimize latency –Maximize parallelism –Keep progs. simple to program & maintain
7
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 7 Thread Pools Thread creation relatively expensive Instead: use pool of threads –When new task arrives, get thread from pool to work on it; block if pool empty –Faster with many tasks –Limits max threads (thus resources) –( ThreadPoolExecutor class in Java)
8
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 8 producer consumer Producer-Consumer Can get pipeline parallelism: –One thread (producer) does work E.g., I/O –and hands it off to other thread (consumer)
9
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 9 producer consumer Producer-Consumer Can get pipeline parallelism: –One thread (producer) does work E.g., I/O –and hands it off to other thread (consumer)
10
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 10 producer consumer Producer-Consumer Can get pipeline parallelism: –One thread (producer) does work E.g., I/O –and hands it off to other thread (consumer)
11
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 11 producer consumer Producer-Consumer Can get pipeline parallelism: –One thread (producer) does work E.g., I/O –and hands it off to other thread (consumer)
12
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 12 producer consumer LinkedBlockingQueue Blocks on put() if full, poll() if empty Producer-Consumer Can get pipeline parallelism: –One thread (producer) does work E.g., I/O –and hands it off to other thread (consumer)
13
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 13 while (true) { do something… queue.put (x); } while (true) { x = queue.poll(); do something… } while (true) { wait for connection; read from socket & parse URL; look up URL contents in cache; if (!in cache) { fetch from disk / execute CGI; put in cache; } send data to client; } Producer-Consumer Web Server Use 2 threads: producer & consumer –queue.put(x) and x = queue.poll();
14
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 14 while (true) { wait for connection; read from socket & parse URL; queue.put (URL); } while (true) { URL = queue.poll(); look up URL contents in cache; if (!in cache) { fetch from disk / execute CGI; put in cache; } send data to client; } Producer-Consumer Web Server Pair of threads – one reads, one writes
15
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 15 while (true) { wait for connection; read from socket & parse URL; queue1.put (URL); } while (true) { URL = queue1.poll(); look up URL contents in cache; if (!in cache) { queue2.put (URL); return; } send data to client; } while (true) { URL = queue2.poll(); fetch from disk / execute CGI; put in cache; send data to client; } 1 2 Producer-Consumer Web Server More parallelism – optimizes common case (cache hit)
16
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 16 When to Use Producer-Consumer Works well for pairs of threads –Best if producer & consumer are symmetric Proceed roughly at same rate –Order of operations matters Not as good for –Many threads –Order doesn’t matter –Different rates of progress
17
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 17 while (true) { wait for connection; read from socket & parse URL; queue1.put (URL); } while (true) { URL = queue1.poll(); look up URL contents in cache; if (!in cache) { queue2.put (URL); } send data to client; } while (true) { URL = queue2.poll(); fetch from disk / execute CGI; put in cache; send data to client; } 1 2 Producer-Consumer Web Server Should balance load across threads
18
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 18 worker Bag of Tasks Collection of mostly independent tasks
19
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 19 worker Bag of Tasks Collection of mostly independent tasks
20
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 20 worker Bag of Tasks Collection of mostly independent tasks
21
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 21 worker Bag of Tasks Collection of mostly independent tasks
22
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 22 worker Bag of Tasks Collection of mostly independent tasks
23
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 23 worker Bag of Tasks Collection of mostly independent tasks
24
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 24 worker addWork Bag of Tasks Collection of mostly independent tasks Bag could also be LinkedBlockingQueue (put, poll)
25
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 25 while (true) { wait for connection; read from socket & parse URL; look up URL contents in cache; if (!in cache) { fetch from disk / execute CGI; put in cache; } send data to client; } Exercise: Restructure into BOT Re-structure this into bag of tasks: –addWork & worker threads –t = bag.poll() or bag.put(t)
26
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 26 addWork: while (true) { wait for connection; t.URL = URL; t.sock = socket; bag.put (t); } Worker: while (true) { t = bag.poll(); look up t.URL contents in cache; if (!in cache) { fetch from disk / execute CGI; put in cache; } send data to client via t.sock; } Exercise: Restructure into BOT Re-structure this into bag of tasks: –addWork & worker –t = bag.poll() or bag.put(t)
27
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 27 worker addWork: while (true){ wait for connection; bag.put (URL); } worker: while (true) { URL = bag.poll(); look up URL contents in cache; if (!in cache) { fetch from disk / execute CGI; put in cache; } send data to client; } worker addWork Bag of Tasks Web Server Re-structure this into bag of tasks: –t = bag.poll() or bag.put(t)
28
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 28 Bag of Tasks vs. Prod/Consumer Exploits more parallelism Even with coarse-grained threads –Don’t have to break up tasks too finely What does task size affect? –possibly latency… smaller might be better Easy to change or add new functionality But: one major performance problem…
29
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 29 worker addWork What’s the Problem?
30
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 30 worker addWork What’s the Problem? Contention – single lock on structure –Bottleneck to scalability
31
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 31 executor Work Queues Each thread has own work queue (deque) –No single point of contention Threads now generic “executors” –Tasks (balls): blue = parse, yellow = connect…
32
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science executor 32 Work Queues Each thread has own work queue (deque) –No single point of contention
33
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 33 executor Work Queues Each thread has own work queue (deque) –No single point of contention
34
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science executor 34 Work Queues Each thread has own work queue (deque) –No single point of contention
35
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 35 executor Work Queues Each thread has own work queue –No single point of contention Now what?
36
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 36 worker Work Stealing When thread runs out of work, steal work from random other thread
37
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 37 worker Work Stealing When thread runs out of work, steal work from top of random deque Optimal load balancing algorithm
38
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 38 while (true) { wait for connection; read from socket & parse URL; look up URL contents in cache; if (!in cache) { fetch from disk / execute CGI; put in cache; } send data to client; } Work Stealing Web Server Re-structure: readURL, lookUp, addToCache, output –myQueue.put(new readURL (url))
39
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science readURL, lookUp, addToCache, output class Work { public: virtual void run(); }; class readURL : public Work { public: void run() {…} readURL (socket s) { …} }; 39 while (true) { wait for connection; read from socket & parse URL; look up URL contents in cache; if (!in cache) { fetch from disk / execute CGI; put in cache; } send data to client; }
40
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 40 readURL output lookUp addToCache worker
41
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science class readURL { public: void run() { read from socket, f = get file myQueue.put (new lookUp(_s, f)); } readURL(socket s) { _s = s; } }; 41
42
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science class lookUp { public: void run() { look in cache for file “f” if (!found) myQueue.put (new addToCache(_f)); else myQueue.put (new Output(s, cont)); } lookUp (socket s, string f) { _s = s; _f = f; } }; 42
43
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science class addToCache { public: void run() { fetch file f from disk into cont add file to cache (hashmap) myQueue.put (new Output(s, cont)); } 43
44
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 44 readURL(url) { wait for connection; read from socket & parse URL; myQueue.put (new lookUp (URL)); } Work Stealing Web Server Re-structure: readURL, lookUp, addToCache, output –myQueue.put(new readURL (url))
45
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 45 readURL(url) { wait for connection; read from socket & parse URL; myQueue.put (new lookUp (URL)); } lookUp(url) { look up URL contents in cache; if (!in cache) { myQueue.put (new addToCache (URL)); } else { myQueue.put (new output(contents)); } addToCache(URL) { fetch from disk / execute CGI; put in cache; myQueue.put (new output(contents)); } Work Stealing Web Server Re-structure: readURL, lookUp, addToCache, output –myQueue.put(new readURL (url))
46
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 46 Work Stealing Works great for heterogeneous tasks –Convert addWork and worker into units of work (different colors) Flexible: can easily re-define tasks –Coarse, fine-grained, anything in-between Automatic load balancing Separates thread logic from functionality Popular model for structuring servers
47
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science 47 The End
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.