2014-05-07 12 views
5

Sto lavorando a un progetto in cui un hub SignalR avvia 12 thread a esecuzione ridotta (nuova discussione()). Ogni thread riporta al client al completamento tramite websockets. I thread non sono ad alta intensità di CPU, ma ottengono alcune informazioni da altri servizi web.SignalR hub self-host o no?

Ora il mio dilemma è questo: dovrei creare un'applicazione hub signalR autonoma ospitata che viene eseguita come servizio o dovrei semplicemente includere l'hub nel mio progetto asp.net MVC?

Qual è il rendimento migliore?

+0

Non si dovrebbe utilizzare il 'multithreading'. – Aron

+0

Il talk che Damian Edwards e David Fowler hanno dato a NDC London 2013 chiamato "Using ASP.NET SignalR .. in rabbia" descrive cosa si vuole fare e mostrano codice di esempio. http://vimeo.com/84677242 a circa 27 minuti. –

risposta

1

Se le prestazioni sono un problema, utilizzerei Thread Pool e non nuovo Thread.

E ospiterò è un servizio di Windows, perché mi darebbe più controllo in termini di risorse da allocare ai thread.

+0

ThreadPool utilizza il pool di thread, quindi potrei anche usare TPL. Quali sono i vantaggi? Quello utilizza solo i thread dal pool di thread ... – Dimo

+0

@Dimo no. TPL non usa il ThreadPool. TPL non si cura di ciò che mette in parallelo il tuo compito. TPL è un livello di astrazione e una libreria di modelli. 'Task.Run' (che viene fornito con TPL) usa' ThreadPool' e francamente non si dovrebbe quasi mai usare 'Task.Run'. – Aron

2

Il modo corretto per farlo NET 4.5 è poi farlo singolo asincrono filettato.

ASP.Net should NEVER be creating new threads. Esistono enormi implicazioni sulle prestazioni quando si utilizzano esplicitamente i thread con ASP.Net.

Inoltre, è necessario sapere che i thread sono un'astrazione di risorse CPU limitate (si è notato tanto affermando che i thread non hanno un utilizzo intensivo della CPU). In .net 4.5 in poi, questo dovrebbe dirvi che NON dovreste usare i thread. Instead, in this case you should be using a threadless I/O api to call your webservices. Ti consiglierei di utilizzare il modello TAP (alias asyncawait), che in pratica è .net 4.5.

Ciò dovrebbe consentire di ridimensionare con una macchina moderatamente potente migliaia di richieste simultanee.

Se si dispone di tutto questo, utilizzando TAP, ASP.Net MVC/IIS funzionerà bene con la massiccia parallelizzazione e "threading". In questo caso, vorrei sconsigliare l'uso di un servizio Windows, poiché si avrà una migliore stabilità con IIS come bootstrapper (gestione della durata e riavvio del servizio in caso di morte).

Problemi correlati