Suponha que haja dois encadeamentos, que se comunicam enviando mensagens de dados de forma assíncrona. Cada encadeamento possui algum tipo de fila de mensagens.
Minha pergunta é de nível muito baixo: qual pode ser a maneira mais eficiente de gerenciar a memória? Eu posso pensar em várias soluções:
- Remetente cria o objeto via
new
. Chamadas do receptordelete
. - Pool de memória (para transferir a memória de volta para o remetente)
- Coleta de lixo (por exemplo, Boehm GC)
- (se os objetos forem pequenos o suficiente) copie por valor para evitar a alocação de heap completamente
1) é a solução mais óbvia, por isso vou usá-lo como protótipo. As chances são de que já é bom o suficiente. Independentemente do meu problema específico, pergunto-me qual técnica é mais promissora se você está otimizando o desempenho.
Eu esperava que o pool fosse teoricamente o melhor, especialmente porque você pode usar conhecimento extra sobre o fluxo de informações entre os threads. Receio, no entanto, que também seja o mais difícil de acertar. Muita sintonia ... :-(
A coleta de lixo deve ser bem fácil de ser adicionada posteriormente (após a solução 1), e eu esperaria que ele funcionasse muito bem. Então, acho que é a solução mais prática se 1) for muito ineficiente.
Se os objetos forem pequenos e simples, copiar por valor pode ser o mais rápido. No entanto, receio que isso force limitações desnecessárias à implementação das mensagens suportadas, por isso quero evitá-lo.