Multitasking
Übersicht

![]() |
DAKBetreff: Multitasking |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich wollt mal fragen, ob iwer das Multitasking in BMax wirklich verwendet.
Ich mein, das war ja eins DER Features schlecht hin. Darauf wurde Monate und Jahre lang gewartet. MT ist als das Wundermittel überhaupt erwartet worden... Bis jetzt hab ich hier aber nicht mehr als ein paar kleine Tests damit gesehen. Und selber gemacht hab ich damit auch nicht mehr. Wie schauen eure Erfahrungen mit MT aus? Braucht das iwer?... Oder is das eurer Meinung nach (so wie auch ein bissal meiner Meinung nach) nur ein weiteres tolles Feature, mit dem man für BMax hausieren gehen kann (alla "meine Programmiersprache kann OOP, DX, OGL, MT, ...")? |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mir bisher nur eine paar kleine Proof of Concepts zusammengescribbelt, also ich bin dem MT gegenüber abgeneigt, weil es atm zein wenig zu kompliziert mit dem syncen ist, ich brauch es nicht, ich kann seriell viel besser arbeiten. | ||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die implementation in BMax ist einfach grotten schlecht. Eine sinnvolle synchronisation von mehreren Threads ist quasi nicht möglich, da jegliche BMax-Module das schlicht und ergreifend nicht eingeplant haben, und somit ein versehentlich und über 3 ecken ausgelöstes Event mal eben das Programm crashen lässt, da es Code, der für einen andern Thread gedacht ist, mal eben aus dem Event-Werfenden Thread aus ausführt. | ||
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habe es ausgiebig getestet, auch mit dem Laden von z.B. Tile-Daten im Hintergrund. Synchronisation ist grundsätzlich kein großes Problem, aber der extrem langsame GC, bei dem man nicht einmal ein Sleep(0) bzw. Delay(0) oder auch nur ein simples Yield() einbinden kann, ist der Knackpunkt.
Siehe hier. Momentan ist also kein sinnvolles MT möglich. |
||
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
also unter BM habe ich noch nichts mit MT gemacht, aber mit B3D. Dort geht es halt einfacher wenn man grundsätzlich einen anderen Weg einschlägt. Daduch das mehrer einzelprogramme laufen ..... mit der RunDll. Hat man Echtes MultiThreading. Den Tasking gibts ja auf dem PC nicht. Der Daten austausch unter den Programmen ist natürlich entweder durch UDP oder Memory Hacking nicht ganz einfach. Aber fiele dinge lassen sich damit toll machen. Zum beispiel asyncrone Lade Rutinen, Asyncrones Laden und Abspieln von Sound. Sortierrutinen für Level daten bei Landschaften und dehr grossen arealen. Wo man getrost auf echzeit verzichten kann. Netzwerk fähigkeit ohne das lästige Wait lag, wenn die Verbindung mal hängt. Mit etwas aufwand läst dich da fiel anstellen. gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das was du da machst ist Multitasking mit UDP/TCP Pipe zwischen den Progs.
Wir reden von Threading: EIN Programm(EINE BINARY) erzeugt paralell existierende Anweisungsblöcke die über das OS paralellisiert werden. |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, ich weiß ja nicht, warum das so langsam sein soll...
Code: [AUSKLAPPEN] Global Wert%=0
Function calc:Object(date:Object) Local i%,m% For i = 0 To (100000000) m=Float(m)+Sin (i)^2 Next Wert=m Return "Blub" EndFunction Local m1=MilliSecs() Local thread:TThread = CreateThread(calc,"Bla") Local b=0 Repeat If wert <> 0 And b=0 Then Print Wert Print "Dauer1: "+(MilliSecs()-m1) b=1 m1=MilliSecs() Local i%,m% For i = 0 To (100000000) m=Float(m)+Sin (i)^2 Next Wert=m Print "Dauer2: "+(MilliSecs()-m1) EndIf Until KeyHit(key_escape) Zitat: 555556
Dauer1: 21678 Dauer2: 21466 Siehe da, ca. 98% der Geschwindigkeit bei der selben Berechnung. Habt ihr mal ein Beispiel, woran man sehen kann, dass es so grottig langsam ist? (AMD Phenom 9650 Quadcore) |
||
between angels and insects |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zumindest meine Versuche Images im Hintergrund zu laden waren sehr vielversprechend. Allerdings habe ich nur an der Oberfläche gekratzt. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sobald in dem Thread etwas stattfinden, wobei der GC aktiv werden, bricht die performance enorm ein. | ||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, der GC ist der Knackpunkt. Bisher habe ich auch immer nur mit Laderoutinen etc. experimentiert, aber nie Gedanken an das Aufräumen verschwendet, was bei richtigen Projekten ja wirklich notwendig ist. | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, na klar aber mal ehrlich, wenn ich da etwas lade, dann wird das doch sowieso alles in Globale Variablen abgelegt. Da muss der GC nix machen. Sowie Berechnungen, Eigentlich laden wir doch rechenintensive Sachen aus, um sie nebenbei machen lassen zu können. Wo muss da groß aufgeräumt werden?
ein Größeres Problem sind die not Threading modulle. z.B. MiniB3d, versucht mal ein Mesh in Threads zu bearbeiten und wenn dann Renderworld kommt, kracht alles weg. |
||
between angels and insects |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es geht ja nicht nur um primitives verteiltes laden(Was mit Images eh nicht geht, da die im Render-Thread geladen werden müssen), sondern um verteiltes Rechnen mit synchronistation zwischen den Threads.
Und hier kackt BMax total ab. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich laufe zwar Gefahr mich zu wiederholen, aber ich habe IMAGES in einem gesonderten Thread geladen und das lief ohne Probleme. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Suco-XBetreff: ...... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mich können bloße Behauptungen auch nicht wirklich überzeugen, vielleicht könnte man das ganze mit ein paar Beispielen untermalen.
Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Beispiel dafür, dass es auch sehr gut laufen kann:
BlitzMax: [AUSKLAPPEN] SuperStrict Zum DL ner fertigen exe: http://oromit.de/uploads/Mandelbrot-MT.exe http://oromit.de/uploads/SDL.dll Hauptproblem beim Threading ist, dass: - Sobald in einem Thread irgendwie ein event ausgelöst wird, diese so behandelt wird, als würde es aus dem Mainthread kommen, was zwangläufig zu einem crash führt. - Es nicht möglich ist, aus zwei threads auf den selben Grafik-Kontext zuzugreifen(Dafür kann BMax nichts) - Der GC unheimlich lahm ist. |
||
![]() |
Suco-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tjoa, dachte da eher an das vielgelobte Negativbeispiel!?
Und wenn wir schon dabei sind wären vergleiche zu anderen Sprachen die einen GC benutzen und MT unterstützen nicht verkehrt. Also was ich im Prinzip haben will..Ein sinnvolles Beispiel für MT welches Blitzmax Defizite im Gegensatz zu anderen Sprachen hervorhebt. Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier mal ein Versuch meinerseits, events über zwei threads zu bewegen:
http://git.oromit.de/gitweb/gi...;hb=master Im Ordner tests liegt auch ein Test, der ausser crashen und/oder einfrieren nichts kann. Die suche nach dem Fehler habe ich nach einigen Tagen aufgegeben. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group