Concurrent programming1

Post on 22-Apr-2015

92 views 0 download

description

Concurrent or Parallel Programming slides for university course (lecture 1).

Transcript of Concurrent programming1

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