Post on 22-Apr-2015
description
Highly Concurrent ProgrammingNick Brandaleone Lecture 1
The End of Moore’s Law
The End of Moore’s Law
Why we don’t have 10 GHz chips today
Chips are too big
Signals can no longer reach the whole chip in a clock cycle
Problems with heat dissipation
The Multicore Era
Manufactures have turned towards multi-core processors in order to increase speed
They are capable of doing multiple calculations in parallel
CPU speeds are likely to stay relatively flat
The Concurrency RevolutionIntel HyperThreading - hardware supported
Future computer architectures will have greater number of cores, from the desktop (12 typical for workstation) to the smartphone (2 in iPhone)
You will need to develop well-written concurrent applications to gain from this hardware development
Vocabulary
Parallelism
Programming as the simultaneous execution of (possibly related) computations
Concurrency
Programming as the composition of independently executing processes
Shared State ConcurrencyThreads concurrently execute code
Contains resources that must be shared
Synchronization is required via locks
Data consistency
Visibility
Correct ordering
Why locking is evil“non-trivial multi-threaded programs are incomprehensible to human …” - Edward A. Lee, The Problem with Threads
“humans are quickly overwhelmed by concurrency and find it much more difficult to reason about concurrent than sequential code” - Sutter and Larus
“I have a firm belief that locking primitives are evil”
Message Passing
Carl Hewitt, Richard Steiger and Peter Bishop released a paper in 1973 introducing the Actor Model concept
C.A.R. Hoare: Communicating Sequential Processes (CSP). Introduced in 1978.
Very similar concepts. We shall refer to them both as “message passing” (aka process calculus)
Alternative ModelsLanguage Method
Erlang Actors
Go Concurrent Sequential Processing
Clojure Software Transactional Memory
Icon Coexpressions
Key Concepts
Actors (or go routines) instead of objects
No shared state between actors
Asynchronous message-passing
Share memory by communicating
Amdahl’s Law
Goals for this course:Learn Concurrent Programming using CSP/Actor model Become familiar with concurrent programming idioms
All assignments can be fulfilled using Language of choice •Elixir (Erlang) •Go (the new “C”) •Scala (Java) •Haskell (purely functional)
Grade •Weekly HW •Mid-term quiz •Final Project
The Languages
ErlangA functional, dynamically typed language
Invented at Ericsson in 1986
Designed for concurrency, scalability and reliability
Erlang in the real worldEricsson ATM switch (301 model)
99.9999999 percent uptime
Facebook chat
100s of millions concurrent users
RabbitMQ
High performance AMQP
Apache CouchDB
distributed, fault-tolerant document DB
Syntactic Sugar for Erlang
Elixir example
Go LanguageDeveloped by Rob Pike, formerly of Bell Labs
Statically compiled and typed language, loosely based upon C syntax
Supports Garbage Collection, and Concurrency
Used internally at Google
Strong community support and documentation
Go example
Scala
The new “Java”. Runs on Java VM
Object oriented and functional design
Very flexible
Can use Java libraries
Syntax can be tough due to mix of OO and F
Scala example
Haskell
Purely functional programming language
Built-in support for concurrency and parallelism
Typically used more in research community than commercially
Powerful but confusing syntax
Haskell example
FUNCTIONAL VS IMPERATIVE OR OOPROGRAMMING STYLES
Homework
Research language that you would like to use
Watch http://blog.golang.org/concurrency-is-not-parallelism video by Rob Pike
Work on Assignment #1 for next week