Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Modelos de Concorrência

Um modelo de concorrência é uma combinação de três coisas:

  1. Uma unidade de concorrência (representando tarefas)
  2. A forma como essas tarefas serão escalonadas
  3. As regras de como duas ou mais tarefas podem coordenar entre si

Uma linguagem de programação pode tranquilamente oferecer mais de um modelo para o programador, que poderá escolher um ou mais modelos para resolver algum problema.

Vamos ver dois modelos de concorrência para ilustrar essa definição. Essas descrições estão longe de serem detalhadas, pois o detalhamento virá nos capítulos dos respectivos modelos.

Threads e Locks

Esse modelo é composto de:

  1. Unidade de Concorrência: Threads do SO
  2. Escalonamento: Preemptivo e realizado no kernel-space.
  3. Coordenação: Memória compartilhada + Locks

As threads se comunicam através de memória compartilhada e, para controlar o acesso a essa memória, realizam sincronização por meio de locks (Mutex, por exemplo).

Concorrência Lock-Free

Esse modelo é composto de:

  1. Unidade de Concorrência: Threads do SO
  2. Escalonamento: Preemptivo e realizado no kernel-space.
  3. Coordenação: Memória compartilhada + Atomics

Nesse caso, é praticamente o mesmo modelo que o anterior. No entanto, ao invés de sincronizarem o acesso à memória por meio de locks, são utilizadas operações atômicas (também chamadas de atomics).

As próximas Partes do livro irão focar em cada modelo de concorrência relevante, aprendendo o jeito correto de raciocinar e programar em cada modelo, e vendo quando usar (ou não) cada um deles.