/ / Задаване на приоритет на нишка с многонишковост няма ефект - java, android, multithreading

Настройването на приоритет на нишката с мултитъкан няма ефект - java, android, multithreading

Проблемът е, когато започна да изпълнявам тежка задача, като използвам повече теми, отколкото една, докато възпроизвеждам музика - възпроизвеждането се напуква (Задаване на numOfCores = 2 или повече). Ако задам numOfCores = 1 възпроизвеждането е нормално.

Как мога да избегна това?

ЗАБЕЛЕЖКА:

  • Не искам да използвам дроселиране, защото искам да си свърша работата бързо, колкото мога.
  • Ако възпроизвеждам музика с друго приложение, е добре.

I. Възпроизвеждане на музика чрез openSL ES чрез JNI в a преден план Обслужване.

II. Този код на AsyncTask, който е стартиран в друга услуга.

@Override
protected Void doInBackground(String... params)
{
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
class Worker implements Runnable
{
@Override
public void run()
{
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
//Heavy work using jni here
}
}
numOfCores = 1; //The phone has 8 cores
final ExecutorService es = Executors.newFixedThreadPool(numOfCores);
//Adding the workers to es
for(...)
{
es.execute(new Worker());
}
es.shutdown();
es.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);



}

Отговори:

0 за отговор № 1

@jameslarge Бихте ли обяснили, моля?

Вашият пример за код е доста схематичен и аз дон "т познавам android, но аз погледнах нагоре setThreadPriority() функцията, и документацията ясно казва, че тя задава приоритета на повикващия поток.

Същата нишка, която задава своя приоритет вслед това вашият пример продължава да създава пул с нишки с една или две работни нишки. Тези работници са различни нишки от тези, които са определени като собствен приоритет.

Вашето оплакване е, че когато има двеработниците, възпроизвеждането на звука "пука", но когато има само един работник, възпроизвеждането на звука е наред. процесор, който е на разположение да прави други неща (напр. възпроизвеждане на звук), но ако създадете пула с двама работници, тогава работниците могат да свържат двата процесора и да не оставят CPU за възпроизвеждане на звука.

Така че, работниците на нишките са проблем. Но вашият код не намалява приоритета на работниците в пула за конци. Той намалява приоритета на нишката създаден пула с нишки. Може би, въпреки че знам, това е дори една и съща нишка, която се опитва да възпроизведе звука.