DEV Community

Francisco Zanfranceschi
Francisco Zanfranceschi

Posted on

[Conceito] - Evite Lidar com Complexidade de Multithreading

Conteúdo original nessa thread do Twitter


Ei dev,

Vou dar um conselho sobre multithreading: a menos que você tenha certeza do que esteja fazendo, evite trabalhar com multithreading nas questões de controlar ciclo de vida de threads, locks de objetos, etc. Segue o fio para algumas alternativas.

cc @sseraphini

img


A primeira dica é analisar se você realmente precisa se preocupar com ciclo de vida de threads, locks, etc. Se a resposta for sim, procure por implementações nativas que têm o propósito de trabalhar com multithread de maneira segura e consistente.


Por exemplo, no Python, existe o módulo queue que possui classes específicas que lidam com toda semântica de locks pra você.


No dotnet, existe a ConcurrentQueue que também já foi feita para ser compartilhada entre threads. Ou seja, é uma fila thread-safe.

(Um objeto thread-safe significa que pode ser compartilhado entre threads diferentes.)


Aposto que na sua linguagem de programação favorita já há implementações de objetos thread-safe. A não ser que sua linguagem seja algo muito exótico :)


Bom, às vezes, as implementações nativas não atendem as nossas necessidades e precisamos de alguma coisa um pouco mais sofisticada como, por exemplp, fazer um pub/sub ou um request/reply.

Pra esses casos, existe uma biblioteca alternativa chamada ZeroMQ que funciona muito bem!

img


O ZeroMQ é uma biblioteca que abstrai o uso de sockets e dá opções interessantes de protocolos de comunicação (in-process, inter-process, TCP, etc.). Ou seja, você pode começar a desacoplar partes dentro do mesmo processo e, se achar necessário, criar processos dedicados depois.


Claro, o ZeroMQ não vai te oferecer o que um broker de mensagens oferece como persistência de mensagens, boa resiliência à falhas, etc. Tudo isso fica a seu cargo.


Se se interessou pelo 0MQ, procura o site e segue alguns tutoriais lá. Não é uma biblioteca muito convencional e talvez você ache um pouco esquisita, mas depois de pegar o jeito, vai que vai! Ah, preste atenção na combinação dos sockets – há restrições nas combinações.


Comenta aí se você conhece alguma alternativa para trabalhar de forma consistente e segura com threads.

E muito obrigado, se leu até aqui! ♥️

Top comments (0)