EDWARD'S LECTURE NOTES:
More notes at http://tanguay.info/learntracker
C O U R S E 
Programming Mobile Services for Android Handheld Systems
Douglas Schmidt, Vanderbilt University
https://www.coursera.org/course/posa
C O U R S E   L E C T U R E 
Concurrency Challenges
Notes taken on June 24, 2014 by Edward Tanguay
•
prime reason for concurrency
•
leveraging advances in hardware and software
•
it's hard to buy a computing device that has just one core
•
today there are even quad-core Android phones
•
historically
•
event driven architecture
•
one thread
•
for blocking operations, had to post on message queue, then handle it later on an event loop
•
awkward to program
•
hard to optimize
•
used the reactor pattern
•
now operating system and middleware have better concurrency support
•
Android provides several concurrency frameworks which enable multiple threads to perform long-running computations in the background
•
this maps efficiently onto multiple cores
•
these background operations can block independently of the UI thread
•
using these frameworks effectively requires knowledge of concurrency patterns
•
e.g. worker thread pattern:
•
increasing performance
•
via parallelism
•
overlaps computation and communication mechanisms
•
background threads that download images can run in parallel with each other, and with a thread that interacts with the user
•
use the RenderScript framework
•
targeted at image processing, computational photography, or computer vision
•
improve responsiveness
•
even with one core, concurrency can be used to improve perceived response time
•
e.g. ensures that the user interface doesn't ignore input while other operations are running
•
challenges
•
accidental complexities
•
written in programs like C
•
pthread
•
low-level and error-prone data types
•
casting disable compile-time type checking, causes errors
•
some types are not compatible on other platforms, e.g. non-POSIX platforms
•
most operating systems today have these kinds of problems when low-level programming languages like C are used
•
developers use tools that aren't set up to handle concurrency
•
you need tools that enable you to drill down and look inside your software to figure out what is happening
•
the behavior you see in the debugger doesn't necessarily reflect the behavior in the actual software
•
inherent complexities
•
scheduling and synchronization
•
the order and time that operations are performed
•
ensure that multiple concurrent threads don't simultaneously execute in criticial sections of a program at the same time
•
analogy:
•
air traffic controllers share runway resource for mulitple planes
•
likewise, Android needs to synchronize access to the SQLite contact database
•
ensures that threads are given proper access to system resources
•
deadlock
•
two or more competing actions are waiting for the other to finish and so neither ever do
•
need to be identified and removed
•
heisenbug
•
bugs that change their behavior when observed
•
you may use a debugger to step through one thread while other threads are running