Sagen, ich habe 10 Fäden beschäftigt, etwas zu tun, und sie rufen manchmal eine MethodeVersand Arbeit von vielen Threads zu einem synchronen Thread
public HandleWidgets(Widget w) { HeavyLifting(w) }
Aber ich meine nicht 10 Threads wollen auf HeavyLifting warten (w) , aber senden Sie stattdessen die Arbeit HeavyLifting (w) an einen 11. Thread, den HeavyLifter-Thread, und fahren Sie asynchron fort. Der HeavyLifter-Thread, an den abgesetzt wird, sollte immer derselbe Thread sein, und ich möchte nicht mehrere Threads erstellen (daher kann ich etwas ganz ähnliches nicht tun: C# Asynchronous call without EndInvoke?).
HeavyLifting (w) ist "Feuer und vergessen", dass die Threads, die HandleWidgets() aufrufen, keinen Rückruf oder ähnliches benötigen.
Was ist eine gesunde Praxis dafür?
Ihr Thread-Setup ist seltsam. Statt das "Heavy Lifting" zu mehreren Threads zu parzellieren, parzellieren Sie das Parzellieren zu mehreren Threads und dann einen einzelnen Thread mit der eigentlichen Arbeit. Dies ist das Gegenteil von dem, was Sie generell wollen, wenn Sie versuchen, Gewinne aus mehreren Kernen zu erzielen. – dlev
Ich habe deinen Titel bearbeitet. Bitte lesen Sie "[Sollten die Fragen" Tags "in ihren Titeln enthalten?] (Http://meta.stackexchange.com/questions/19190/)", wobei der Konsens "nein, sie sollten nicht" lautet. –
Hallo Drev, es ist ungewöhnlich. Meine reale Anwendung besteht darin, dass die zehn Threads eine Schnittstelle zu externer Hardware bilden und der elfte Thread ein Problem löst, das sich auf Daten bezieht, die von der Hardware gesammelt werden. Ich sollte nicht mehr als das sagen;) – John