Página 2 de 3
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 13:35
por fladimir
Marcos, baseado no q eu escrevi e no artigo, estou me referindo a nossos sistemas executando um processo (exemplo gerando 1 relatorio q demora 8min) e consume o processamento de 01 núcleo sendo q temos 8 núcleos, não teria q processar muito mais rápido? tipo 1 min por exemplo
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 14:37
por marcosgambeta
fladimir escreveu:Marcos, baseado no q eu escrevi e no artigo, estou me referindo a nossos sistemas executando um processo (exemplo gerando 1 relatorio q demora 8min) e consume o processamento de 01 núcleo sendo q temos 8 núcleos, não teria q processar muito mais rápido? tipo 1 min por exemplo
Pela lógica, uma aplicação usando uma thread não dividiria seu trabalho em mais de um núcleo. Então, o processamento de um relatório não seria afetado.
E tem a questão do acesso ao disco. Mesmo que a geração do relatório seja agilizada de certa forma, a velocidade ficaria nivelada pela velocidade com que o software lê os dados do HD.
Talvez jogando o processamento do relatório numa thread separada, ocorra alguma melhora no desempenho.
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 15:14
por Jairo Maia
Olá Pessoal,
Apenas continuando dentro desse raciocínio:
Quanto a essa questão, tudo que li até agora quando tive oportunidade, ela existe para permitir uma limitação, não uma ampliação. E sempre também li que a melhor performance é deixar esse gerenciamento por conta do SO.
Mas... aprender é sempre bom.
Outrossim, a internet está vasta de "especialistas" dizendo que é o aplicativo que tem que gerenciar isso, porém, nunca vi nenhuma explicação tecnicamente plausível. Apenas "achometros".
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 15:28
por asimoes
Uma boa ferramenta da MS é o monitor de recursos.
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 15:33
por asimoes
Um bom teste pra ver como trabalha a compilação do harbour (fork)
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 15:40
por asimoes
Estou gerando uma compilação do harbour agora, olha só o hbmk2
Vários processos sendo executados e encerrados
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 15:59
por asimoes
fiz uma cópia de arquivos com o Fastcopy agora ele criou 9 threads para copiar, super rápido.
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 16:07
por asimoes
Olha só que coisa interessante fazendo um teste de criação de tabela temporária
Código: Selecionar todos
DbCreate("mem:tstMemory", aField, "DBFCDX", .T., "tstMemory")
APPEND FROM ConRec.DBF FOR field->Cancelado == 'S' WHILE Evento() //para não sobrecarregar a aplicação
Observem que o executável demo.exe utilizou 4 threads

??

- Screen Shot 03-16-17 at 04.03 PM.PNG (4.37 KiB) Exibido 2799 vezes
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 16:44
por fladimir
Obrigado pelas explicações...
No teu caso Alexandre essa parte final q vc colocou ... While Evento() // para não sobrecarregar a aplicação
Q não entendi muito bem, o q faz Evento() ?
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 18:06
por asimoes
Sabe aquela mensagem a "aplicação não está respondendo" serve para isso, tem situações que o executável trava por conta disso. a função Evento() é para evitar isso e usa hwg_DoEvents() mas pode ser outra que tenha a mesma finalidade.
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 18:30
por fladimir
Em console precisa será?
Usar processamento 8 Nucleos
Enviado: 16 Mar 2017 18:37
por asimoes
Principalmente console, faça o teste
Usar processamento 8 Nucleos
Enviado: 28 Mar 2017 16:59
por janio
aSimoes,
Pode postar a função EVENTO()?
Janio
Usar processamento 8 Nucleos
Enviado: 28 Mar 2017 19:25
por asimoes
Janio,
Segue a função Evento()
Usar processamento 8 Nucleos
Enviado: 28 Mar 2017 22:26
por Claudio Soto
DoEvents tiene que ser implementada a nivel de C:
Código: Selecionar todos
//-------------------------------------------------------------------------------------//
HB_FUNC ( DOEVENTS )
//-------------------------------------------------------------------------------------//
{
MSG Msg;
HWND hDlgModeless = NULL;
while( PeekMessage ( &Msg, NULL, 0, 0, PM_REMOVE ) )
{
hDlgModeless = GetActiveWindow(); // this is not better way of take Handle of Modeless Dialog Box
if ( hDlgModeless == NULL || !IsDialogMessage ( hDlgModeless, &Msg ) ) // ADD June 2015
{
TranslateMessage ( &Msg );
DispatchMessage ( &Msg );
}
}
}
Lo que hace DoEvents es vaciar la cola de mensajes de Windows haciendo que los mismos sean procesados, esto evita que la aplicación se congele. Cuando una aplicación demora más de 5 segundos en procesar sus mensajes Windows muestra el famoso mensaje que la aplicación no responde dando la sensación de que la aplicación se travo. Por eso a nivel de prg a veces dentro de los bucles o de rutinas que demoran mucho hay que colocar DoEvents para evitar esto.