Detectando Tópicos Bloqueados

votos
1

Eu tenho uma teoria sobre resolução de problemas um aplicativo Asynchronous (estou usando a CCR) e gostaria de saber se alguém pode confirmar a minha lógica.

Se uma aplicação multi-threaded baseado CCR usando o número padrão de linhas (isto é, um por núcleo) é mais lenta do que a mesma aplicação com o dobro de fios especificados - faz isso significa que as roscas estão bloqueados algures no código

O que acha? Será esta uma maneira rápida e válido para detectar se tópicos estão sendo inadvertidamente ser bloqueado?

Publicado 12/02/2009 em 03:26
fonte usuário
Em outras línguas...                            


4 respostas

votos
0

Descobri que para manter o fluido do sistema com fios mínimos, I manter as tarefas lidar com I / O mais conciso possível. Eles simplesmente postar os dados do I / O em outra porta e não fazer nenhum processamento adicional. Os dados são, portanto, em fila noutro local para processamento de uma maneira controlada, sem interferir com a tarefa de pegar de dados tão rápida quanto possível. Este processamento pode acontecer no ExclusiveGroup de um Intercalar Se há estado compartilhado para pensar ... e um efeito colateral útil é que as tarefas exclusivos nunca vai amarrar todas as threads em um Dispatcher (no entanto, eu suspeito que há maneiras provavelmente Nattier de gerenciar isso na API CCR)

Respondeu 19/07/2009 em 00:11
fonte usuário

votos
0

Se este for o caso, isso significa que o seu pool de threads está sendo esgotado (ou seja, você tem 2 tópicos mas você assíncrona pended 4 iOS ou algo) - se o seu trabalho é fortemente IO bound, a regra de "um thread por core" doesn 't realmente se aplicam.

Respondeu 12/02/2009 em 05:09
fonte usuário

votos
0

Uma maneira barata de dizer se tópicos estão sendo bloqueados é obter a hora atual do sistema antes de fazer qualquer operação potencialmente bloqueio, em seguida, após a operação, e ver quanto tempo passou. Por exemplo, enquanto espera para uma mensagem chegar, medir para ver quanto tempo o segmento foi bloqueado à espera de uma mensagem chegar.

A menos que haja sempre mais do que suficiente mensagens para ser processado, tópicos irá bloquear à espera de uma mensagem. Se você tem mais threads, então você tem mais potencial de mensagens geradores (dependendo do seu design) e, portanto, segmentos de espera para receber mensagens serão mais propensos a ter um pronto.

Exatamente um segmento para CPU é muito pouco a menos que você pode garantir que sempre haverá mensagens suficientes para nenhum segmento vai ter que esperar.

Respondeu 12/02/2009 em 04:17
fonte usuário

votos
0

O que você quer dizer com "mais lento"?

Se você deseja detectar automaticamente tópicos bloqueados, talvez esses segmentos devem enviar um batimento cardíaco, que são então observados por um monitor de algum tipo, mas suas opções são limitadas.

Respondeu 12/02/2009 em 03:47
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more