Appartamenti a thread singolo vs appartamenti a thread multipli [duplicato]
-
20-08-2019 - |
Domanda
Possibile duplicato:
Potresti spiegare STA e MTA?
Tutti i thread di ThreadPool si trovano nel file appartamento multithread.
- Come per MSDN
Cosa significa? Sono davvero preoccupato di quale sia la differenza tra il modello di appartamento multi thread vs single thread. O cosa significa il modello dell'appartamento? Ho letto il MSDN su di esso e non ha davvero senso per me. Penso di avere un'idea, ma pensavo che qualcuno qui potesse spiegarlo in un inglese semplice.
Grazie, Anthony D
Aggiornamento 1
Trovato questo Potresti spiegare STA e MTA?
Qualcuno può essere più descrittivo?
Aggiornamento 2
Sto anche cercando una risposta su come questo si applica al pool di thread e su cosa devo fare attenzione per questo.
Soluzione
STA (appartamento a thread singolo) e MTA (appartamento a thread multipli) hanno a che fare con COM . È possibile progettare i componenti COM per l'accesso a un singolo thread, nel qual caso sono ospitati in un STA , oppure possono essere internamente protetti da thread e ospitati in un MTA . Un processo può avere un solo MTA, ma molti STA. Se stai solo consumando componenti COM, tutto quello che devi veramente sapere è che devi abbinare l'appartamento al componente o succederanno cose brutte.
Altri suggerimenti
In realtà, gli STA e gli MTA hanno un impatto sul codice .NET. Vedi il post sul blog di Chris Brumme per ulteriori dettagli di cui probabilmente avrai bisogno:
https://devblogs.microsoft.com/ cbrumme / appartamenti-and-pompaggio-in-the-clr /
È davvero importante capire come gli STA inviano messaggi in .NET. Ha conseguenze.
Se il tuo oggetto COM deve credere che si trova in un ambiente a thread singolo, usa STA. Hai la garanzia che la creazione e tutte le chiamate saranno effettuate dallo stesso thread. Puoi utilizzare in modo sicuro l'archiviazione locale di thread e non è necessario utilizzare sezioni critiche.
Se al tuo oggetto COM è possibile accedere da più thread contemporaneamente, usa MTA - non ci saranno protezioni messe in atto.
Come altri hanno sottolineato, generalmente ha un impatto limitato sulle applicazioni .NET.
Tuttavia, tieni presente che l'host di test Microsoft utilizzato per i test unitari è effettivamente implementato in uno STA, il che significa che ci sono limitazioni su cosa puoi fare nel test unitario. Ad esempio non è possibile eseguire un WaitAll
su un WaitHandle
in un unit test se si utilizza l'host di test di Microsoft.
Non devi preoccuparti a meno che tu non stia eseguendo l'interoperabilità COM, nel qual caso ci sono problemi di smistamento. Non ha ramificazioni per .net stesso.