Concorrência e Paralelismo

CPCourse Page
6 ECTSSemester 2Semester 1Exam: Optional
Overall
No reviews yet
Workload
--

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.