Download lec01-intro-2015-09-01.pdf

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

C Sharp (programming language) wikipedia , lookup

Transcript
CMSC 433 Fall 2015
Section 0101
Rance Cleaveland
Lecture 1: Introduction
9/1/2015
©2012-15 University of Maryland
Course Home Page
• www.cs.umd.edu/class/fall2015/cmsc433/
• Includes syllabus, tentative course schedule,
professor / TA contact info, etc.
• Two TAs
– Ashwin Lakshmanaswamy
– Jeff Manzione
9/1/2015
©2012-15 University of Maryland
1
Computing Environment
• Java 8
• Eclipse 4.5 (Mars)
• CS submit server
• Piazza (for on-line discussions)
For installation help on Java, Eclipse, submit
server: www.cs.umd.edu/eclipse
JUnit 4+ recommended as well.
9/1/2015
©2012-15 University of Maryland
2
This Course
• “Programming Language Technologies and
Paradigms”
• Could be a lot of things: logic / functional
programming, testing, formal methods,
theorem proving, interactive development
environments, …
• This semester (as in previous semesters):
concurrency
9/1/2015
©2012-15 University of Maryland
3
Concurrency?
• = “multi-threading”
– Traditional applications are single-threaded: at any point
during execution, at most one instruction can be executed
next.
– In multi-threaded applications, several instructions can be
executed “next”!
• Programming languages include mechanisms for
concurrency
–
–
–
–
9/1/2015
Threads
Locks
Interrupts
Etc.
©2012-15 University of Maryland
4
Why Concurrency?
• Performance
If they can do operations simultaneously, applications
run faster!
• Availability
Compute-intensive parts of application need not slow
down other parts (e.g. user interface)
• Application demands
Many applications feature concurrency as part of system
design (e.g. operating systems, communications
protocols, simulations)
9/1/2015
©2012-15 University of Maryland
5
Course Focus
• How to program effectively using concurrency
constructs in Java
• Towards this goal, we will:
– Understand uses, pitfalls of concurrency
– Gain proficiency in various mechanisms for managing
concurrency
– Do a number of projects in Java to put this
understanding into practice
• Java is the vehicle, but the principles we learn will
be applicable beyond
9/1/2015
©2012-15 University of Maryland
6
If Concurrency Is So Useful, Why Not
Teach It Sooner?
• We do!
• However, concurrency is hard
– Concurrent programs are hard to debug
– Concurrent programs are hard to optimize
– Concurrent programs are hard to test
9/1/2015
©2012-15 University of Maryland
7
Why Is Concurrency Hard?
• Nondeterminism!
– Executing same program can yield different answers
– Replaying a given execution is very difficult
• Concurrency breaks procedural abstraction
– Procedural abstraction: a given sequence of
instructions will always return the same result if
started in the same state
– Implication: you can think of a sequence of
instructions as conceptually a single instruction
– Basis for: compilation, method definition, etc.
9/1/2015
©2012-15 University of Maryland
8
Nondeterminism
• Suppose we have
– Shared variable shared that is initially 0
– Two threads t1, t2 with instance variables
myShared, each of which does:
myShared = shared;
myShared++;
shared = myShared;
• What are possible values of shared
afterwards?
– 1, 2!
9/1/2015
©2012-15 University of Maryland
9
Procedural Abstraction
• Consider previous example, and suppose
threads were launched via following:
t1.start();
t2.start();
• If procedural abstraction holds
– t1.start() is conceptually a single operation
that increments shared
– So is t2.start()
– Only allowed answer would be 2!
9/1/2015
©2012-15 University of Maryland
10