Fondamentalmente sto lavorando su questo algoritmo di rilevamento del battito, la cosa strana che sto incontrando in questo momento è che quando ho diviso il carico di lavoro su un altro thread. Quindi ora ho un thread principale e un altro thread di lavoro. Il mio thread di lavoro in qualche modo funziona sempre più velocemente del thread principale. Sembra strano perché quello che ho imparato è che il thread principale dovrebbe teoricamente essere sempre più veloce perché non ci vuole tempo per inizializzare il thread. Tuttavia, quello che ottengo è che anche io passo altri 1024 campioni al thread di lavoro (stanno entrambi lavorando con circa 30 milioni di campioni al momento), è ancora più veloce del thread principale. È perché ho applicazioni in esecuzione sul mio thread principale? Sono davvero confuso adesso. Ecco il codiceC# multithreading Comportamento strano
UnityEngine.Debug.Log ("T800 Start");
Step3 s1= new Step3();
Step3WOMT s2= new Step3WOMT();
System.Object tempObj= samples2 as System.Object;
float[] tempArray = new float[eS.Length/ 2];
System.Threading.ParameterizedThreadStart parameterizedts = new System.Threading.ParameterizedThreadStart(s1.DoStep3);
System.Threading.Thread T1 = new System.Threading.Thread(parameterizedts);
T1.Start (tempObj);
s2.DoStep3(samples1);
UnityEngine.Debug.Log ("s2");
//UnityEngine.Debug.Log (stopwatch.ElapsedMilliseconds);
T1.Join();
Non ti preoccupare io sto solo usando C# caratteristiche nel multithread quindi credo che dovrebbe andare bene. Quello di cui sono davvero confuso è che se commento T1.join(); allineare il tutto in qualche modo andare ancora più lentamente. Sono sinceramente confuso in questo momento perché non sembra esserci una risposta ragionevole a questa domanda.
Certo, se un thread esegue la stessa logica più velocemente di un altro è perché c'è meno "penetrazione" su quel thread. In WPF (.Net) per esempio L'interfaccia utente del foro è ospitata sul thread principale e l'applicazione viene eseguita su quel thread per impostazione predefinita. Con questa conoscenza ha spesso senso creare applicazioni multi-thread per condividere il carico di lavoro tra i thread in modo da consentire loro di fare di più - o di consumare meno tempo per lo stesso lavoro. –
Anche se non è un grosso problema, 1503 millisecondi contro 1481 millisecondi, è piuttosto strano. Anche il thread worker sta eseguendo un oggetto come oggetto per la conversione dell'oggetto in float []. Quindi non dovrebbe essere sempre più lento del thread principale? –
Non c'è davvero alcuna differenza pratica tra '1503' e' 1481' ms. Sarei interessato a vedere come stai facendo il tuo tempismo - che probabilmente ha anche un impatto. – Enigmativity