Concorrência e Paralelismo
Description
At the end of this course, the student will have acquired the knowledge, skills and competencies that will enable them to:
Know:
- Understand the concepts of concurrency and parallelism, and how these are
useful in the software development process;
- Identify the models used to solve problems using multiprocessor systems;
- Know the paradigms used to develop algorithms on multiprocessor systems;
- Know the languages, libraries and tools used to develop concurrent
programs;
- Understand the correctness properties of concurrent systems, e.g.
linearization, progress, fairness and deadlock-freedom.
- Understand the properties of shared memory, e.g., register constructions
and atomic snapshots.
- Be able to evaluate the use of synchronization primitives used in
concurrent data structures, from atomic registers, consensus protocols and
FIFO queues, to universal constructs such as consensus universality.
- Be familiar with common concurrency problems and how to mitigate and avoid
them.
At the end of this course, the student will have acquired the knowledge, skills and competencies that will enable them to:
Know:
- Understand the concepts of concurrency and parallelism, and how these are
useful in the software development process;
- Identify the models used to solve problems using multiprocessor systems;
- Know the paradigms used to develop algorithms on multiprocessor systems;
- Know the languages, libraries and tools used to develop concurrent
programs;
- Understand the correctness properties of concurrent systems, e.g.
linearization, progress, fairness and deadlock-freedom.
- Understand the properties of shared memory, e.g., register constructions
and atomic snapshots.
- Be able to evaluate the use of synchronization primitives used in
concurrent data structures, from atomic registers, consensus protocols and
FIFO queues, to universal constructs such as consensus universality.
- Be familiar with common concurrency problems and how to mitigate and avoid
them.
Know-how:
- Identify and exploit opportunities for concurrency and parallelization in a
software system;
- Partition a problem into multiple tasks to be executed in a concurrent
system.
- Reason about the behavior of concurrent systems;
- Build correct and efficient concurrent systems;
- Apply programming patterns, including spin-locks, monitors, barriers and
work-stealing.
- Use programming languages such as Java and C and libraries to develop
concurrent software systems;
- Develop concurrent data structures, e.g. linked lists, queues, stacks,
scatter tables and skiplists.
- Use programming tools to develop concurrent applications, including the
design, implementation, debugging and installation phases.
- Analyze synchronization patterns, e.g., coarse- and fine-grained locks,
optimistic and lazy locks, non-blocking synchronization and atomic
synchronization primitives.
- Predict and measure the performance characteristics of concurrent systems.