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
↓
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!
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)