Das Implementieren von Threading in einem Programm ist schwierig, aber warum werden manche Leute sie nicht implementieren, selbst wenn ein offensichtlicher Bedarf dafür besteht.
Ein Beispiel: Das Programm muss ein Dataset aus einer Datenbank laden. Die Aufgabe besteht darin, die Verbindung herzustellen und die Daten aus der Datenbank in einem Arbeitsthread abzurufen und sie dann in die GUI zu laden, wobei der GUI-Thread für den Benutzer ansprechend bleibt .
Aber nein, ich habe mit Leuten gesprochen, die zu denken scheinen, dass Fäden böse und böse sind und man sollte sie um jeden Preis vermeiden. Ich habe sogar gehört, dass ein Klassenlehrer von der Verwendung von Threads abgeraten hat und daher nicht auf deren Verwendung eingehen wollte. WAS???
Mit der Hardware, die in Multi-Core geht, denke ich, dass wir Threads besser verstehen und keine Angst haben müssen, sie zu verwenden. Ich persönlich finde es ein faszinierendes Thema.
Was haben Sie über falsches Threading gehört?
quelle
Antworten:
Das Einfädeln ist schwierig
Sicher. Es kann sein. Die Leute haben jedoch die Idee im Kopf, dass es so schwer ist, dass sie sich nicht die Mühe machen , es herauszufinden.
Es ist nicht so, als ob es unmöglich wäre.
quelle
await
/async
keywords :)Es ist nicht der Threading-Teil, der schwierig ist, sondern die Notwendigkeit der Synchronisation und alles andere, was mit der Verwendung von Threads einhergeht. Wie können Sie in Ihrem GUI-Beispiel dem Haupt-Thread mitteilen, dass auf das Dataset zugegriffen werden kann? Weitergeben Sie eine ganze Reihe von Rückrufen? Verteilen Sie eine ganze Reihe von Prüfvariablen in Ihrem Code? In einigen GUI-Modellen, z. B. Silverlight, gibt es eine sogenannte Thread-Affinität. Dies bedeutet, dass Sie nicht von anderen Threads aus auf GUI-Elemente zugreifen können, die sich im Haupt-Thread befinden bereit zur Weiterverarbeitung.
Ich habe wirklich nichts Falsches über Threads gehört. Ich habe gerade eine ganze Reihe von situativen Fallstudien über Synchronisation gelesen, bei denen der von Ihnen verwendete Algorithmus nicht von Natur aus parallel ist.
quelle
Threading löst alle Ihre Probleme
Wenn Sie Leistungsprobleme haben, sollten Sie nicht direkt zum Threading springen.
Fäden sind leicht
Fäden sind in zehn und zwanzig leicht. Das Laichen von Tausenden von Threads ist nicht.
Threading ist einfach [Java]
Es ist einfach, Threads zu erstellen, das heißt aber nicht, dass Sie davon profitieren werden.
quelle
Sie werden irgendwann alle Vorteile durch das Threading verlieren, da die Behebung verrückter Fehler, die durch die Verwendung einiger Bibliotheken / Funktionen entstehen, die nicht thread-sicher sind (was Sie nicht wussten), eine übermäßige Synchronisation erfordern wird.
Sie haben eine viel höhere Wahrscheinlichkeit, auf einen Fehler zu stoßen, den Sie nicht beheben können, wenn Sie Threads verwenden, wenn Sie dies nicht tun.
quelle
Zusammenfassend lässt sich sagen, warum Threads schwierig zu verwenden sind: -
Wahre Dinge 1) Benötigen Sie die Synchronisierung und sorgfältige Entwurfsentscheidungen darüber, was gesperrt werden soll und wann gesperrt werden soll
2) Keine Kontrolle über den Laufzeitfluss
3) Schwieriges Debuggen
4) (Sehr wenige mal) Plattformkompatibilität: - Bibliotheken existieren, um dies zu erledigen
Falsche Dinge: -
1) Verwirrende Konzepte von thread-sicheren und wiedereintretenden Funktionen
2) Threads sehen auf dem Papier gut aus, sind aber sehr schwer zu implementieren
quelle
Wenn Sie keine Tests für Ihren Code schreiben möchten, verwenden Sie keine Threads.
Themen sind nicht für den typischen "Copy and Paste" -Programmierer geeignet, der die zugrunde liegenden Grundlagen des Betriebssystems und der Computerarchitektur nicht versteht. Da 90% der Programmierer nur mit Java vertraut sind, sind dies nicht die Personen, die Threads verwenden sollten. Java macht Threads "einfach", aber ich habe viele Programmierer gesehen, die einfach dachten, wenn sie synchronisierte Strukturen verwendeten, würde ihr Code in Threads funktionieren ... ähm nein.
Davon abgesehen muss jeder irgendwo anfangen. Machen Sie einfach nicht Ihr erstes Threading-Projekt, um den Produktions-Backend-Server Ihres Unternehmens zu aktualisieren.
quelle
Ich sehe nicht, dass diese Situation aus mindestens vier Gründen die Verwendung von Threading erforderlich macht:
Der Datenabruf sollte sehr schnell sein.
In vielen Branchenanwendungen hat der Benutzer in den ein oder zwei Sekunden, in denen er auf das Ergebnis wartet, nichts mit der Anwendung zu tun. Außerdem muss der Benutzer warten, bis die Daten in irgendeiner Weise zurückkommen, um die gewünschte Aufgabe abzuschließen. Andererseits könnte die Abfrage intelligent codiert werden, sodass immer nur eine Seite mit Informationen abgerufen wird, und andere Optimierungstechniken könnten die Antwortzeit verkürzen.
In webbasierten Schnittstellen können Links bezüglich des Threading-Modells aktiviert werden.
Threading erhöht die Komplexität, wie Sie zugeben, und einige Entwickler sind möglicherweise nicht in der Lage, Features hinzuzufügen oder komplexen Code zu debuggen.
Meine Meinung ist: Verwenden Sie Threading, wenn Sie müssen, weil die Wartbarkeit und Zuverlässigkeit von Software für ein Unternehmen wertvoller ist als Code-Eleganz.
quelle