Eu tenho trabalhado sob o princípio de compartilhar nada da programação simultânea. Essencialmente, todos os meus threads de trabalho têm cópias imutáveis de somente leitura do mesmo estado que nunca são compartilhadas entre eles ( mesmo por referência ). De um modo geral, isso funcionou muito bem.
Agora, alguém introduziu um cache singleton sem bloqueio ( por exemplo, um dicionário estático ) que todos os threads estão acessando simultaneamente. Como o dicionário nunca é alterado após a inicialização, não há bloqueios. Não houve nenhum problema de segurança de thread, mas agora há uma degradação do desempenho.
A questão é ... como não há bloqueios, por que a introdução desse singleton cria um impacto no desempenho? O que exatamente está acontecendo nos bastidores que poderia explicar isso?
Para confirmar, o acesso a esse novo singleton é a única alteração e posso recriá-lo com segurança simplesmente comentando a chamada para o cache.