Embracing concurrency for fun utility and simpler code

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Embracing concurrency for fun utility and simpler code - Presentation Transcript

    1. Embracing Concurrency for Fun, Utility & Simpler Code Michael Sparks BBC R&D, http://www.kamaelia.org/Home Ignite Leeds, Jan 2009
    2. Embracing Concurrency for Fun, Utility & Simpler Code Or “what we've learnt as a part of the Kamaelia project about making concurrency something that's fun and useful, and usable by novice and advanced developers alike... ...rather than a pain in the neck” Michael Sparks BBC R&D, http://www.kamaelia.org/Home Ignite Leeds, Jan 2009
    3. Why? Hardware finally going massively concurrent ... Opportunity! .... PS3, high end servers, trickling down to desktops, laptops) “many hands make light work” but Viewed as Hard ... do we just have crap tools? “And one language to in the darkness bind them” Problems ... can just we REALLY abandon 50 years of code for Erlang, Haskell and occam? Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    4. Missing Something? Fundamental Control Structures ... in imperative languages number greater than 3! (despite what you get taught...!) Control Structure Traditional Abstraction Biggest Pain Points Sequence Function Global Var Selection Function Global Var Iteration Function Global Var Parallel Thread Shared Data Usually Skipped Lost or duplicate update are most common bugs This slide raises the point that teaching of imperative languages often misses out concurrency as a fundamental Michael Sparks construct, leaving a conceptual gap BBC R&D, http://www.kamaelia.org/Home for most developers
    5. Regarding using concurrency, what sort of applications are we talking about here? Desktop gsoc Novice Media APPS trainee 3rd Party Network Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    6. Speak 'n Write Think backend P2P Whiteboard Programming Simple needed for (logo) ER DB Modeller P2P Radio Games Kids youtube/flickr Torrent 3D Systems type systems Compose Realtime Music Desktop gsoc UGC Paint App P2P Web Server Backend Secure “phone” Transcoder Social Net Vis Novice Media ... Shot Change APPS Detection MiniAxon trainee ScriptReader Mobile DVB MediaPreview Reframing on Mobile Reliable 3rd Party Podcasts Multicast Network Macro Sedna “record XMPP XMLDB everything” AWS Email & pubsub Web (Amazon) Spam Qt SMTP IRC Serving Gtk Greylisting ClientSide microblogging AIM Pop3Proxy Spam Tools Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    7. Core Approach: Concurrent things with comms points Generally send messages Keep data private, don't share outbox inbox outbox inbox signal control signal control ... ... ... ... Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    8. But I must share data? Use Software Transactional Memory ie version control for variables. 1. Check out the collection of values you wish to work on 2. Change them 3. Check them back in 4. If conflict/clash, go back to 1 Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    9. Perspectives in APIs! (1/2) If you have concurrency it becomes natural to think in terms of 1st 2nd and 3rd 1st Person - I change my state person. This affects an API's structure, and can be vital for understanding it! This is one we've found that makes sense 2nd Person – YOU 3rd Person – want to me to do Bla should something do something (you send (I send a message) outbox inbox me a message) signal control ... ... Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    10. Perspectives in APIs! (2/2) If you have concurrency it becomes natural to think in terms of 1st 2nd and 3rd private real methods person. This affects an API's structure, and can be vital for understanding it! This is one we've found that makes sense Messages sent Messages to public outboxes from public inboxes outbox inbox signal control Also, think Also, think ... ... about stdout about stdin Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    11. Actor Systems Distinction can be unclear, private real methods potential source of ambiguity* Messages No outbox concept from public Possible issues with inboxes rate limiting* inbox Hardcodes recipient control in the sender ... *system dependent issue Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    12. Advantages of outboxes No hardcoding of recipient allows: - Late Binding - Dynamic rewiring Concurrency Patterns as outbox inbox Reusable Code signal control ... a concurrency DSL ... ... Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    13. A Core Concurrency DSL Pipeline(A,B,C) Graphline(A=A,B=B, C=C, linkages = {}) Tpipe(cond, C) Seq(A,B,C), PAR(), ALT() Backplane(“name”), PublishTo(“name”), SubscribeTo(“name”) Carousel(...) PureTransformer(...) StatefulTransformer(...) PureServer(...) MessageDemuxer(...) Source(*messages) NullSink Some of these are work in progress – they've been identified as useful, but not implemented as chassis, yet Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    14. Pipeline Example Pipeline( MyGamesEventsComponent(up=\"p\", down=\"l\", left=\"a\", right=\"s\"), BasicSprite(\"cat.png\", name = \"cat\", border=40), ).activate() MyGames Events Component Basic Sprite Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    15. Graphline Example Graphline( NEXT = Button(...), PREVIOUS = Button(...), PREVIOUS NEXT FIRST = Button(...), (button) (button) LAST = Button(...), CHOOSER = Chooser(...), FIRST LAST IMAGE = Image(...), (button) (button) ... ).run() Chooser Image Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    16. Server Example data from user data Socket handler Main to Server Core user Created at runtime to handle the connection Remote Protocol Handler Factory User Protocol handler Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    17. Server Example You therefore need to provide this bit. Main Server Core Protocol Handler Factory Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    18. Server Example from Kamaelia.Chassis.ConnectedServer import ServerCore from Kamaelia.Util.PureTransformer import PureTransformer def greeter(*argv, **argd): return PureTransformer(lambda x: \"hello\" +x) class GreeterServer(ServerCore): protocol=greeter port=1601 GreeterServer().run() Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    19. Backplane Example # Streaming Server for raw DVB of Radio 1 Backplane(“Radio”).activate() Pipeline( DVB_Multiplex(850.16, [6210], feparams), # RADIO ONE PublishTo(\"RADIO\"), ).activate() def radio(*argv,**argd): return SubscribeTo(“RADIO”) ServerCore(protocol=radio, port=1600).run() Michael Sparks BBC R&D, http://www.kamaelia.org/Home
    20. Thank you for listening! If you have questions, grab me later :-) Michael Sparks BBC R&D, http://www.kamaelia.org/Home

    + kamaeliankamaelian, 9 months ago

    custom

    1800 views, 0 favs, 1 embeds more stats

    This was a talk at O'Reilly UK's "Ignite" event in more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1800
      • 1559 on SlideShare
      • 241 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 27
    Most viewed embeds
    • 241 views on http://yeoldeclue.com

    more

    All embeds
    • 241 views on http://yeoldeclue.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories