coupling
play

COUPLING Issue Description Session Management How do distributed - PowerPoint PPT Presentation

WYSIWIS AND S HARED W INDOWS Prasun Dewan Department of Computer Science University of North Carolina at Chapel Hill dewan@cs.unc.edu COUPLING Issue Description Session Management How do distributed users create, destroy, join, and leave


  1. R EPLICATED W INDOW S YSTEM (R EVIEW ) Collaboration-Unaware Collaboration-Unaware Collaboration-Unaware Application Application Application a^, w 1 , x, y a^, w 2 , x, y a^, w 3 , x, y a^, w i , x, y a^, w 3 , x, y Input Distributor Input Distributor Input Distributor a^, w 2 , x, y draw a, w 1 , x, y draw a, w 2 , x, y draw a, w 3 , x, y Collaboration-Unaware Collaboration-Unaware Collaboration-Unaware Window System Window System Window System press a User 1 User 2 User 2 27

  2. R EPLICATED M ODEL A LGORITHM For each input I I should be followed by matching EditInput, EditMade, EditNotified, EditObserved, EditDisplayed For each replica, I should be followed by matching EditSent to Others How to change to replicated window For each EditReceived R R should be followed by matching EditMade, EditNotified, EditObserved, EditDisplayed For each replica, R should be followed by matching EditSent 28

  3. R EPLICATED W INDOW A LGORITHM For each Window w, create Telepointer w t Dispatching means giving it to Window system can only guarantee appropriate (sub) window listeners to delivery not processing process For each Window (including Telepointer) Input I I should be followed by matching WindowEventDispatched For each replica, if Transmit(I) then I should be followed by matching WindowEventSent Not all events may be sent (relaxed WYSIWIS) For each WindowEventReceived R R should be followed by matching WIndowEventDispatched For each replica, R should be followed by matching WindowEventSent 29

  4. T RANSMIT F UNCTION Telepointer Drag Window Manager State Window Size Send all mouse drags (of Telepointer)? Desired (actual) Time between drags Screen Pointer < 30 ms (10ms) Mouse Move Scroll Positions Filter by Event Time Key Click Send actions of all windows? Mouse Click Not locking window, mail window Mouse Drag Filter by Window Name Filter by Event Type 30

  5. S YSTEM -S PECIFIC I SSUES For each Window w, create Telepointer w t How to create telepointer? For each Window (including Telepointer) Input I I should be followed by matching WindowEventDispatched For each replica, if Transmit(I) then I should be followed by matching WindowEventSent How to intercept I? For each WindowEventReceived R How to inject I? R should be followed by matching WIndowEventDispatched How to translate window IDs? How to filter events? For each replica, R should be followed by matching WindowEventSent 31

  6. C ONCRETE J AVA - BASED W INDOW S YSTEM Discussion so far fairly abstract Need real window system to make it concrete Will use Java as language for exercises and class examples 32

  7. C ASE S TUDY : J AVA AWT Hides the underlying window system from programmer Portability 33

  8. W INDOW S YSTEM C LASSES Window 2 Window 1 Top Level Window 12 Window 12 Sub Windows Window 122 Sub Windows Window 121 34

  9. AWT/S WING W INDOW S YSTEM C LASSES Top Level (J)Frame 2 Window 1 Sub Windows Container 12 (J)Panel 12 Canvas 122 Sub Windows (J)Component 121 35

  10. AWT/S WING L AYERING All OS events forwarded to AWT can be intercepted and injected All Swing events may not be interceptable/injectable Could not intercept/inject caret position in text components Telepointer possible over Swing but not less controllable AWT Some OS events may not be correctly windows interceptable/injectable Swing Windows Seem to inject two events for AWT AWT Windows checkbox OS Windows Which layer is more sharable: AWT/Swing? 36

  11. C LASS AWT/S WING L IBRARY Library provided to make hide messy details of AWT/Swing (Easily) Sharable AWT/Swing Swing Windows AWT Windows OS Windows 37

  12. W INDOW I/O: O UTPUT Window Client a ^, win1, x, y draw a, win1, x, y Window System press a a Target of draw in Java, on what kind of object is it invoked? 38

  13. J AVA H ELPER C LASS : G RAPHICS (2D) C ONTEXT drawString() setColor() drawOval() fillOval() Graphics(2D) drawLine() fillLine () fillRect() drawRect() 39

  14. E XAMPLE G RAPHICS C ALLS g.drawOval(charX - X_OFFSET, charY - Y_OFFSET, DIAMETER, DIAMETER); g.drawLine(charX, charY, charX, charY - CARAT_LENGTH); g.drawString("" + lastChar, charX, charY); Called when? What if window is When input is given hidden? 0 to N times for each When output is required input While the component is unexposed, the Who repaints the window when it is drawing might have changed, so system copy exposed: window system or might not be current application So, in general the application must redraw it. 40

  15. E XPOSE E VENTS Window Client draw complete draw exposed expose win, rect(s) OR win win Window System Window Manager Application can Window Window requests moved resized expose event When a window is resized, or Or may draw complete window (un) obscured expose event is sent to it with exposed region(s) Window system clips in case app Application can draw only draws outside window bounds 41 exposed region(s)

  16. O VERLAPPING W INDOWS Exposed rectangle 42

  17. O VERLAPPING W INDOWS (V ERTICAL W INDOW ON T OP ) Multiple exposed rectangles 43

  18. S INGLE E XPOSED Single exposed rectangle Drawing outside exposed region will be clipped Window system could also keep last drawn pixels of each window as backing store Repainting trades off time efficiency for space Important if windows are lightweight and nested 44

  19. C ALLING P AINTING C ODE g.drawOval(charX - X_OFFSET, charY - Y_OFFSET, DIAMETER, DIAMETER); g.drawLine(charX, charY, charX, charY - CARAT_LENGTH); g.drawString("" + lastChar, charX, charY); When what is to be Called when? drawn changes What is the Java lastChar, charX, charY API for receiving expose events? When exposed area How to changes? accommodate both? 45

  20. AWT BASED E XPOSE E VENT P ROCESSING paint Window manager queues Window Client Class (Graphics) paint/expose event for window Processing queue results in (paint event) in paint method of IS-A Call window to be called Window Class paint repaint() (JPanel) (Graphics) Repaint method can be called by application to queue an expose event for window Application can override paint to draw 46

  21. O VERRIDING P AINT M ETHOD public class ACircledCharacterDrawer extends JFrame implements MouseListener, KeyListener { … // called when an enqueued paint event for this component is dequeued public void paint (Graphics g) { super.paint(g); // clears the window // better to use FontMetrics to center circle g.drawOval(charX - X_OFFSET, charY - Y_OFFSET, DIAMETER, DIAMETER); g.drawLine(charX, charY, charX, charY - CARAT_LENGTH); g.drawString("" + lastChar, charX, charY); } public void keyTyped(KeyEvent event) { setChar(event.getKeyChar()); } public void setChar(char newValue) { lastChar = newValue; repaint();// enqueues a paint event } public void mousePressed(MouseEvent event) { charX = event.getX(); charY = event.getY(); repaint(); // enqueues a paint event 47 }

  22. W INDOW I/O: I NPUT Window Client  a ^, win1, x, y draw a, win1, x, y Window System press a a 48

  23. J AVA I NHERITANCE BASED I NPUT E VENT P ROCESSING public final dispatchEvent() in window called in response to processEvent input event in that window Window Client Class (AWTEvent) dispatchEvent() calls protected IS-A processEvent dispatchEvent processEvent Window Class (AWTEvent ) (AWTEvent) (JPanel) processEvent can be overridden by application subclasses This was the approach used in Java 1.0 49

  24. S INGLE -I NHERITANCE P ROBLEM Client Class Window Client Class IS-A IS-A Window Class (JPanel) 50

  25. C ONCEPTUAL P ROBLEM WITH I NHERITANCE Client Class Window Client Class IS-A IS-A Window input processor (or drawer) is not a window Window Class (JPanel) 51

  26. D ELEGATING TO WINDOW SYSTEM Client Class Window Client Class IS-A HAS-A Window Class (JPanel) 52

  27. J AVA C OARSE -G RAINED D ELEGATION - BASED I NPUT E VENT P ROCESSING eventDispatched Window Client Class (AWTEvent) addAWTListener() Toolkit HAS-A dispatchEvent processEvent Window Class (AWTEvent) (AWTEvent) (JPanel) Must distinguish between mouse Single way to get all events and and event and key pressed, key then possibly dispatch them – typed, mousepressed, useful for sharing events and mousedragged, and other actions telepointer 53

  28. H IGHER -L EVEL , P ER -W INDOW L ISTENERS mousePressed KeyPressed Window Client Class (MouseEvent) (MouseEvent) HAS-A addMouseListener() processEvent (AWTEvent) Window Class addKeyListener() (JPanel) addMouseMotion Listener() 54

  29. F INE -G RAINED D ELEGATION M ODEL public class ACircledCharacterDrawer extends JFrame implements MouseListener, KeyListener { public ACircledCharacterDrawer() { addMouseListener( this); addKeyListener( this); } public void keyTyped(KeyEvent event) { setChar(event.getKeyChar()); } public void mousePressed(MouseEvent event) { charX = event.getX(); charY = event.getY(); repaint(); // enqueues a paint event } 55

  30. F INE -G RAINED I MPLEMENTATION mousePressed KeyPressed Window Client Class (MouseEvent) (MouseEvent) HAS-A addMouseListener() processEvent (AWTEvent) Window Class addKeyListener() (JPanel) addMouseMotion Listener() 56

  31. O UTPUT P ROCESSING : I NHERITANCE paint Window Client Class (Graphics) IS-A Call Window Class paint repaint() (JPanel) (Graphics) 57

  32. O UTPUT P ROCESSING : D ELEGATION paint Window Client Class (Graphics) Delegate classes not related by subtype relationship !(DelegateContainer IS-A HAS-A DelegateComponent) paint Window Class addPaintListener() (Graphics) (DelegateJPanel) The paint method of library SWT supports delegation classes will call paint model in toolkit methods in delegates As does Shareable AWT/Swing Library 58

  33. U NDERSTANDING J AVA W INDOW S YSTEM public class ACircledCharacterDrawer extends JFrame implements MouseListener, KeyListener { … // called when an enqueued paint event for this component is dequeued public void paint (Graphics g) { super.paint(g); // clears the window // better to use FontMetrics to center circle g.drawOval(charX - X_OFFSET, charY - Y_OFFSET, DIAMETER, DIAMETER); g.drawLine(charX, charY, charX, charY - CARAT_LENGTH); g.drawString("" + lastChar, charX, charY); } public void keyTyped(KeyEvent event) { setChar(event.getKeyChar()); } public void setChar(char newValue) { lastChar = newValue; repaint();// enqueues a paint event } public void mousePressed(MouseEvent event) { charX = event.getX(); charY = event.getY(); repaint(); // enqueues a paint event 59 }

  34. S YSTEM -S PECIFIC I SSUES How to create a telepointer? How to intercept input for broadcast? How to inject received input? How to translate window IDs? How to filter events? 60

  35. H OW TO C REATE A W INDOW T ELE P OINTER TelePointerFrame paint (Graphics) IS-A (J)Frame paint (Graphics) HAS-A (J)Panel paint (Graphics) A component can be painted by it and all of its ancestors HAS-A A key or mouse event in a component is also an event in all Cannot share existing (J)TextArea paint (Graphics) of its ancestors user interfaces Nesting: smaller component overrides Cannot use nesting to drawing and input processing of enclosing 61 draw telepointer static components

  36. H OW TO C REATE A W INDOW T ELEPOINTER ? Replace the top- level frame’s window with one that draws movable telepointer shape? Cannot use nesting to draw telepointer Even if we could, cannot share existing user interfaces 62

  37. L AYERING VS . N ESTING Frame and Frame components setGlassPane() Glass Pane Nesting: smaller component overrides drawing and input processing of enclosing static components Layering: Higher dynamic layer overrides drawing and input processing of lower, possibly smaller components. Can simulate dynamic multiple parents of a child Type based vs. structure based overriding 63

  38. H OW TO C REATE A W INDOW T ELE P OINTER GlassPane paint (Graphics) HAS-A (J)Frame paint (Graphics) HAS-A Layering: Higher dynamic layer overrides drawing and input (J)Panel paint (Graphics) processing of lower, possibly smaller components. Can simulate dynamic multiple parents of a child How do children components get (J)TextArea paint (Graphics) events? Tricky and my solution does not Glass pane will consume its events always work (menus) – based on (drag of telepointer) and re-dispatch 64 code found on the web others to deepest children

  39. H OW TO C REATE A W INDOW T ELE P OINTER A BSTRACTION ? TelepointerUtility attach(Frame) Cannot draw our own shape GraphicsPainter paint (Graphics) AnExtendibleTele addPainter PointerGlassPane (GraphicsPainter) (Frame) AnExtendible TelePointer getPointerX/Y() GlassPane GlassPaneController 65 getGlassPaneController()

  40. A TTACHING A T ELEPOINTER AND P AINTER public interface GraphicsPainter { void paint(Graphics g); } glassPane = new AnExtendibleTelePointerGlassPane(telePointedFrame); glassPane.addPainter(createTelePointerPainter()); public interface GlassPaneController { int getPointerSize(); void setPointerSize(int aSize); int getPointerWidth(); void setPointerWidth(int aWidth); int getPointerHeight(); void setPointerHeight(int aHeight); boolean isShowTelePointer(); void setShowTelePointer(boolean showTelePointer); } Painter should use the dimensions in controller to draw shape 66

  41. H OW TO C REATE A T ELEPOINTER Instantiate a telepointer glasspane, passing it a JFrame Implement a telepointer painter Painter should reference the telepointer glass pane to get paint position Painter should reference the telepointer controller to get paint dimensions 67

  42. S YSTEM -S PECIFIC I SSUES  How to create a telepointer? How to intercept input for broadcast? How to inject received input? How to translate window IDs? How to filter events? 68

  43. G ENERAL M ODEL OF S INGLE -U SER W INDOW S YSTEM Collaboration-Unaware Application a^, w 2 , x, y Collaboration-Unaware Window System press a User 2 69

  44. G ENERAL M ODEL OF R EPLICATED W INDOW S YSTEM Collaboration-Unaware Application a^, w 2 , x, y Input Distributor a^, w 2 , x, y Collaboration-Unaware Window System press a User 2 70

  45. G ENERAL M ODEL OF S INGLE -U SER W INDOW S YSTEM A GAIN Collaboration-Unaware Application a^, w 2 , x, y Hot to tap and inject input in Java a^, w 2 , x, y Collaboration-Unaware Window System press a User 2 71

  46. J AVA C OARSE -G RAINED D ELEGATION - BASED I NPUT E VENT P ROCESSING eventDispatched Window Client Class (AWTEvent) addAWTListener() Toolkit HAS-A dispatchEvent processEvent Window Class (AWTEvent) (AWTEvent) (JPanel) Can intercept events at the No direct way to inject or stop same time they are dispatched events – need to inspect event and to local components send it to appropriate component 72

  47. J AVA I NPUT Q UEUE Collaboration-Unaware Application a^, w 2 , x, y EventQueue a^, w 2 , x, y Collaboration-Unaware Window System press a User 2 73

  48. R EPLACING Q UEUE Can intercept events Collaboration-Unaware before they are Application dispatched to application a^, w 2 , x, y Must remember to InputDistributerQueue forward to application a^, w 2 , x, y Must prevent cycles Must filter uncoupled Collaboration-Unaware events Window System press a Toolkit. getDefaultToolkit().getSystemEventQueue().push( User 2 new InputDistributingQueue()) ; 74

  49. L IBRARY L ISTENABLE E VENT Q UEUE Collaboration-Unaware Application a^, w 2 , x, y a^, w 2 , x, y AnExtendible ListeningInput AWTEventQueue Distributer a^, w 2 , x, y Collaboration-Unaware Window System Toolkit. getDefaultToolkit().getSystemEventQueue().push( press a this) User 2 AnExtendibleAWTEventQueue.getEventQueue(). addEventQueueHandler( new ListentingInputDistributer ()); 75

  50. H OW TO I NTERCEPT AND I NJECT W INDOW E VENTS Window Manager State Will define a listener to get filtered events Window Size Screen Pointer AWTEventQueue newEvent Mouse Move Handler (AWTEvent) Key Click Mouse Click Singleton class, invoke Inject event? static method in it to Mouse Drag get global queue static addEventQueueHandler getEventQueue() (AWTEventQueueHandler) AnExtendible AWTEventQueue getCommunication dispatchReceivedEvent EventSupport() (AWTEvent) Will convert serializable event 76 Does not fire new event to local event

  51. L ISTENABLE , I NJECTABLE E VENT Q UEUE package util.awt; public interface ExtendibleAWTEventQueue extends PropertyVetoerRegistrar { public void addEventQueueHandler(AWTEventQueueHandler listener); public void removeEventQueueHandler(AWTEventQueueHandler listener); public void clearEventQueuehandlers(); public void dispatchEvent(AWTEvent event); void dispatchReceivedEvent(AWTEvent anEvent); } dispatchEvent vs. dispatchReceivedEvent ~ replicatedAdd vs. observableAdd 77

  52. S YSTEM -S PECIFIC I SSUES  How to create a telepointer?  How to intercept input for broadcast?  How to inject received input? How to translate window IDs? How to filter events? 78

  53. T RANSLATE W INDOW ID S How to find corresponding windows in different replicas? 79

  54. T RANSLATING W INDOW I DS Collaboration-Unaware Collaboration-Unaware Collaboration-Unaware Application Application Application a^, w 1 , x, y a^, w 2 , x, y a^, w 3 , x, y a^, w i , x, y a^, w 3 , x, y Input Distributor Input Distributor Input Distributor a^, w 2 , x, y draw a, w 1 , x, y draw a, w 2 , x, y draw a, w 3 , x, y Collaboration-Unaware Collaboration-Unaware Collaboration-Unaware Window System Window System Window System press a User 1 User 2 User 2 80

  55. C ONNECTING R EPLICA W INDOWS Window Window Replicated shared window systems can assume same sequence of windows. Can use names of Java windows Window Window How to replace local window ids (Component instances) in events with global 81 ids (integer, string) and global ids in events with local ids?

  56. T RANSLATION Given AWTEvent e, component c Send ASerializableAWTEvent (e, toID(c)) ASerializable ASerializable AWTEvent AWTEvent (AWTEvent, String) Dispatch toDispatchedEvent(e , Given SerializableAWTEvent (event e, id i) toComponent(i)) to AnExtendibleAWTEventQueue AWTEvent CommunicatedAWT toDispatchedEvent(SerializableAWTEvent , EventSupport Component component); AnExtendibleAWTEventQueue. getEventQueue().getCommunicatedEventSupport() 82

  57. S ERIALIZABLE E VENT  L OCAL E VENT package util.awt; public class ASerializableAWTEvent implements SerializableAWTEvent { public ASerializableAWTEvent(AWTEvent theEvent, String theComponentId) { … } } SerializableAWTEvent serializableEvent (SerializableAWTEvent) aMessage; AWTEvent aDispatchedEvent = AnExtendibleAWTEventQueue. getEventQueue(). getCommunicatedEventSupport().toDispatchedEvent( serializableEvent, toComponent(serializableEvent)); AnExtendibleAWTEventQueue. getEventQueue().dispatchReceivedEvent ( aDispatchedEvent) toComponent() written by programmer to translate between global id and local component 83

  58. T RANSLATE W INDOW ID S How to find corresponding windows in different replicas? How to find the windows and creation sequence in each replica? 84

  59. W INDOW C REATION E VENT  R EGISTER S UBTREE Once we find a window, we can recursively find all of its descendants ((Container) component).getComponents(); Resize event sent to EventQueue when it is created AWTMisc. isResizeEvent(event); If E is window creation (resize) event then register the global ids of its subtree if the subtree has not already been registered 85

  60. A T ALE OF T WO R ESIZE E VENTS Resize event sent both when window resized and it is created. Want to dispatch normal received resize events but not creation events Connect queue listener before window tree created to get resize events To prevent window creation events remotely broadcast broadcaster can be attached after window tree is created, which means two different listeners broadcaster can have a special mode to separate the two phases receive listener can be attached after local window tree created 86

  61. S YSTEM -S PECIFIC I SSUES  How to create a telepointer?  How to intercept input for broadcast?  How to inject received input?  How to translate window IDs? How to filter events? 87

  62. T RANSMIT F UNCTION Window Manager Events Mouse Drag Filter by Event Type Filter by Event Time Done by library System. currentTimeMillis(); AWTMisc. isMouseDragged Filter by (Top) Window Name Event(event); Object event.getSource(); Need to ensure that last mouse drag event is sent SwingUtilities.getRoot (Component) Need to cast source as Component 88

  63. R EPLICATED VS . C ENTRALIZED W INDOW S YSTEM Collaboration-Unaware Collaboration-Unaware Collaboration-Unaware Application Application Application a^, w 1 , x, y a^, w 2 , x, y a^, w 3 , x, y a^, w i , x, y a^, w 3 , x, y Input Distributor Input Distributor Input Distributor a^, w 2 , x, y draw a, w 1 , x, y draw a, w 2 , x, y draw a, w 3 , x, y Collaboration-Unaware Collaboration-Unaware Collaboration-Unaware Window System Window System Window System press a User 1 User 2 User 2 Centralized? 89

  64. C ENTRALIZED S HARED W INDOW S YSTEM The shared application runs on Collaboration-Unaware the (master) computer of only Application one of the collaborators Input/Output The shared application runs on the (master) computer of only Collaboration-Aware Collaboration-Aware one of the collaborators Proxy Proxy Each user’s input relayed to application through proxies Collaboration-Unaware Collaboration-Unaware Window System Window System Each output of application broadcast to all users through Master Slave proxies Computer Computer User 1 User 2 90

  65. P ROXY F UNCTIONS Slave proxy relays input to app Window Application through master proxy a ^, w 1 , x, y Master proxy broadcasts output draw a, w 1 , x, y to all slave proxies, which relay to local window system I/O Relayer & Output Broadcaster Proxies translate window ids a ^, w i , x, y draw a, w i , x, y draw a, w i , x, y I/O Relayer I/O Relayer a ^, w 2 , x, y draw a, w1, x, y draw a, w 2 , x, y draw a, w 3 , x, y Window System Window System Window System press a User 1 User 2 User 3 91

  66. R EPLICATED W INDOW A LGORITHM For each Window w, create Telepointer w t For each Window (including Telepointer) Input I I should be followed by matching WindowEventDispatched For each replica, if Transmit(I) then I should be followed by matching WindowEventSent How to change it to centralized? For each WindowEventReceived R R should be followed by matching WIndowEventDispatched For each replica, R should be followed by matching WindowEventSent 92

  67. C ENTRALIZED W INDOW A LGORITHM Master and Slave For each Window w, create Telepointer w t For each Window (including Telepointer) Event I I should be followed by matching WindowEventDispatched (including Telepointer) If isSlave() and Transmit(I) then I should be followed by matching WindowEventSent to Master Master Receiver For each WindowEventReceived R at Master, R should be followed by matching WindowEventDispatched For each output call O, O should be followed by WindowRequestMade and WindowRequestSent to all Slaves Slave Receiver For each WindowRequestReceived R at Slave, R should be followed by 93 WindowRequestMade

  68. C ENTRALIZED VS . R EPLICATED W INDOW S YSTEMS Centralized vs. Replicated Shared Window Systems ~ Centralized vs. Replicated Shared Model Systems 94

  69. R EPLICATED M ODEL : I SSUES Interactor Interactor Model Model All of these problems still occur in replicated window systems Consistency issues of causality and concurrent operations (to be addressed later) Correctness and performance issues when model is non deterministic, accesses central resources, and has side effects 95

  70. E XAMPLE OF N ON D ETERMINISM AND O THER R EPLICATION P ROBLEMS (R EVIEW ) Collaboration-Unaware Collaboration-Unaware Application Application Different users will see display display different output random random number number Behavior of centralized Proxy Window System Proxy Window System and replicated different Assumption: Output should be only a function of input Collaboration-Unaware Collaboration-Unaware Window System Window System Non determinism! User 1 User 2 96

  71. D ISTINGUISHED “R EPLICA ” M ODEL S OLUTION Interactor Interactor Model Model Cannot use application- specific solution if supporting collaboration- Model’ unaware applications A central model executes operations that are expensive, non-idempotent, or access 97 central resources

  72. C ENTRALIZED VS . R EPLICATED M ODEL None of the replication issues Interactor Feedback times involve round trip delays Feed through incurs extra hop (beyond Model relaying) Refresh and query operations also involve round trip delays (e.g. searching history) Interactor Can we fix the last problem? Cannot use caching of high- Refresh, scrolling involves Caching! level state, no local non round trips window state 98

  73. S HARED W INDOW S YSTEMS Problems of centralization and replication get aggravated Collaboration-awareness required for distinguished process in replicated systems In central systems, round trip for readable model state Plus other problems 99

  74. C ONCURRENT /I NTERLEAVED INTERACTION Window Application User inputs can get (un) desirably mixed a , w1, x1, y1 b, w1, x2, y2 Can multiple users generate a I/O Relayer & Output stream not creatable by one Broadcaster user? I/O Relayer I/O Relayer Window System Window System Window System Type a Type b User 1 User 2 User 3 100

Recommend


More recommend