Betrachten Sie einen Prozess, der mehrere Anwendungsdomänen erstellt. Haben diese Anwendungsdomänen denselben Thread-Pool? Wenn ja, wie wird es zwischen mehreren Anwendungsdomänen koordiniert?Wird Threadpool zwischen Anwendungsdomänen freigegeben?
Antwort
Der Threadpool wird in allen AppDomains geteilt - denn das bedeutet Fäden zwischen AppDomains Schalt enden könnte es gewesen ist perf Arbeit rund um das (möglicherweise oft!):
http://blogs.msdn.com/b/ericeil/archive/2009/04/23/clr-4-0-threadpool-improvements-part-1.aspx
[...] In der Tat, wir verletzen diese "Regel" bereits: seit .NET 3.5, der CLR Thread-Pool hat separate FIFO-Warteschlangen für jede AppDomain im Prozess, und eine zusätzliche unabhängige FIFO-Warteschlange für "native" Arbeit i B. , wie diejenigen, die von einem Host in die Warteschlange eingereiht wurden (ASP.net ist der Hauptbenutzer dieses Features ). Wir Round-Robin zwischen dieser Arbeit Warteschlangen, so dass jeder zu Arbeit für einige Zeit ausgeführt werden, bevor auf den nächsten zu bewegen. [...]
BTW, beachten Sie, dass der Thread streng genommen nicht geteilt wird über den gesamten Prozess hinweg, da die v4-CLR das Laden von Side-by-Side mit V2 ermöglicht und jeder einen eigenen Threadpool hat.
Nicht 100% sicher, aber ich denke Thread-Pool ist einmal pro Prozess, nicht einmal pro AppDomain. Versuchen Sie sich diesen Artikel auf :
Der Threadpool wird zwischen allen appdomains geteilt, da jeder threadpool Thread kontextunabhängig ist und das gesamte threadpool-Laufzeitprofil stark von der Hardware abhängig ist, auf der Sie laufen (Anzahl der Procs, Hyperthreading) und so)
Es gibt einen Thread-Pool pro Prozess. Der Thread-Pool hat eine Standardgröße von 25 Threads pro verfügbaren Prozessor. Die Anzahl der Threads im Thread Pool kann mit der SetMaxThreads-Methode geändert werden. Jeder Thread verwendet die Standardstapelgröße und wird unter der Standardpriorität ausgeführt.
Quelle: http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx
Wenn ich mich richtig erinnere, die CLR behandelt die Threadpool-Threads intern und reinigt den Thread-Kontext, bevor eine weitere Arbeitsanforderung dient.
- 1. Beziehung zwischen Threads, Anwendungsdomänen und Worker-Prozesse
- 2. Anwendungsdomänen und Threads
- 3. SQL-Verbindung wird freigegeben
- 4. Einen Threadpool zwischen zwei Klassen teilen
- 5. Ich verstehe nicht Anwendungsdomänen
- 6. Wie wird ein Modell normalerweise zwischen ViewModel-Objekten freigegeben?
- 7. Virtueller Speicher wird nie freigegeben
- 8. Speicher wird nicht korrekt freigegeben?
- 9. SpriteKit-Szene wird nicht freigegeben
- 10. Sächsischer Speicher wird nicht freigegeben
- 11. UISearchBar in UINavigationBar zwischen UIViewControllern freigegeben
- 12. Auflisten aller Anwendungsdomänen ohne mscoree
- 13. Zu ThreadPool hinzufügen, während es ausgeführt wird
- 14. Öffentliche freigegebene Variable zwischen Benutzern freigegeben?
- 15. Thread vs ThreadPool
- 16. Kamera wird nicht freigegeben, nachdem App abstürzt
- 17. Speicherleck in iOS, AVPlayer wird nie freigegeben
- 18. iOS6: CBPeripheral wird beim Verbinden freigegeben
- 19. UIViewController Unterklasse (Mimics UITableViewController) wird nicht freigegeben
- 20. Wird Flock am Prozessausgang automatisch freigegeben?
- 21. UImage-Speicher wird nicht freigegeben VM: ImageIO_JPEG_DATA?
- 22. Wie sicherzustellen, dass UIImage nie freigegeben wird?
- 23. Erkennen, wann ein NSView freigegeben wird
- 24. Berühren Speicherdeallokationsroutinen den Block, der freigegeben wird?
- 25. AVPlayerViewController wird nach dem Abnehmen nicht freigegeben
- 26. Quellcode wird von AWS Elastic Beanstalk freigegeben
- 27. Ausnahmen auf Threadpool Threads
- 28. Threadpool-Implementierung: condition_variables vs. yield()
- 29. ThreadPool und Threading.Timer?
- 30. TaskCreationOptions.LongRunning-Option und ThreadPool
Dies ist der Link zur neuesten Dokumentation für .NET 4. http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx. Es gibt 250 Worker-Threads pro verfügbarem Prozessor. – btlog