Ja, das kannst du total. Vor langer Zeit (Win 95?) Sind wir vom kooperativen Multitasking zum Multithreading übergegangen, weil immer jemand den kooperativen Teil vermasselt hat. Jedes Programm auf Ihrem Computer hat mindestens einen Thread. Möglicherweise mehr. Und die CPU wechselt immer wieder ein paar Millionen Mal pro Sekunde zwischen all diesen Threads. Wenn keiner von ihnen etwas zu tun hat, kann es sogar für einige Zeit inaktiv werden.
Multicore-Systeme bedeuten nur, dass zwei oder mehr dieser Threads parallel ausgeführt werden.
Es bringt Ihnen jedoch viel weniger dazu. Mit Multithreading auf einem Single Core-Computer können Sie lediglich Multitasking simulieren.
Mulitasking reicht aus, um zu verhindern, dass der GUI-Thread aufgrund eines langwierigen Vorgangs blockiert. Die Implementierung ist jedoch im Allgemeinen kompliziert, es sei denn, Sie haben Hilfe vom Compiler oder Langauge (wie C # async ... warten). Infolgedessen verwendeten viele GUI-Programmierer nur Multithreading und Invoking, um Multitasking zu fälschen. Wenn dieser Code auf einem oder mehreren Kernen ausgeführt wird, spielt dies keine Rolle.
Am wichtigsten ist, dass Multitasking NICHT für CPU-gebundene Operationen geeignet ist. 95% aller Async-Probleme sind jedoch nicht an die CPU gebunden. Sie sind netzwerk- oder festplattengebunden. Auf einem Singlecore-Computer hilft Multithreading auch nicht bei CPU-gebundenen Dingen. Wenn Sie zwei Threads haben, die beide 100% CPU-Zeit benötigen (dasselbe Programm oder ein anderes), aber nur einen Kern, um sie auszuführen, muss die CPU nur zwischen der Ausführung beider Threads mit 49% wechseln und die verbleibenden 2% für alle verwenden andere Threads, die nur wenig tun.
Schließlich können nur sehr wenige Probleme tatsächlich mit Multithreading behandelt werden. Versuchen Sie einfach, die Fibonacci-Sequenz (ein Thread für jedes Paar) zu multithreaden, ohne sie langsamer, speicherintensiver und komplexer zu machen.
tl; dr; Sie benötigen Multithreading und einen Multicore-Computer für CPU-gebundene Probleme. Die meisten asynchronen Probleme sind nicht an die CPU gebunden. Multitasking ist weit genug. Und Sie können mithilfe von Threads auch auf einem Single-Core-Computer Multitasking durchführen.