IPLUSO 24352
Concurrent and Distributed Programming
Computer Engineering and Applications
-
ApresentaçãoPresentationCurrent software systems are becoming highly concurrent and distributed to utilize modern multicore architectures and increasing speed and bandwidth in networks. Shared-memory concurrency in multicore programs and message-passing concurrency in distributed programs share many common abstractions and problems. In order to have to develop efficient and correct concurrent programs, programmers have to understand the behaviors of the primitives and reason about them and about the underlying architectures, which often execute instructions out of order, and by compilers, whose optimizations affect the outcomes of concurrent programs. This course aims to explore techniques for concurrent and distributed programs.
-
ProgramaProgrammeCP1: Concurrent Programming Processes; threads; concurrency; parallelism; synchronous and asynchronous execution. Communication and synchronization; competition and cooperation; atomic operations; critical sections; starvation, deadlock, and livelock. Memory usage; non-determinism. CP2: Mechanisms for concurrent programming Synchronization primitives: locks, semaphores, monitors, barriers, and blocking queues. Races, deadlocks and starvation prevention. CP3: Using concurrent programs Illustration of the basic paradigms. Classical synchronization problems. CP4: Distributed Systems Internet Protocols; TCP/IP family; Application Layer; HTTP. Client-server architecture. CP5: Distributed systems implementation using sockets Sockets libraries. Serialization. CP6: Distributed systems implementation using RPC Remote Procedure Calls. Implementations: gRPC, RMI, XML-RPC. CP7: Event-driven programming Basic concepts. Events in GUIs. Events in Distributed Systems.
-
ObjectivosObjectivesOA1: Understand what is concurrent programming, it's main characteristics, and the mechanisms involved; understand the notions of Critical Section, Race, Deadlock and Starvation, in a concurrent program. OA2: Understand and use communication and synchronization primitives; understand and apply techniques that prevent errors such as Races, Deadlocks and Starvation. OA3: Understand and implement the main communication paradigms between threads using the modern programming languages. OA4: Understand the characteristics of a distributed system; understand and use sockets to implement inter-process communication in distributed systems. OA5: Understand and use Remote Procedure Calls (RPC) to implement distributed systems. OA6: Understand the basic concepts involved in event-driven programming in concurrent and distributed programs, and be able to write programs that respond appropriately to events.
-
BibliografiaBibliographyDocumentação fornecida pelo docente da UC no Moodle. Downey, A. B. - Little Book of Semaphores. https://greenteapress.com/semaphores/LittleBookOfSemaphores.pdf :Green Tea Press, 2016. Online. Goetz, B., Peierls, T., Bloch, J., Bowbeer, J., Holmes, D., Lea, D. - Java Concurrency in Practice. Addison-Wesley, 2006. Java Platform Standard Edition 8. https://docs.oracle.com/en/java/javase/22/docs/api/index.html. 2024 Hattingh, C. Using Asyncio in Python 3: Understanding Python's asynchronous programming features. O'Reilly Media, Inc. 2018.
-
MetodologiaMethodologyUse of problem-based learning methodology, w hich allows the student to acquire knowledge, at the same time that carrying out the set of procedures for solving problems allows them to develop skills and competences. This methodology promotes learning as part of the activity developed to solve the problem.
-
LínguaLanguagePortuguês
-
TipoTypeSemestral
-
ECTS6
-
NaturezaNatureMandatory
-
EstágioInternshipNão