Nella concorrenza Java, cosa rende una stringa "attiva"? Solo il fatto che non sia al minimo? Un thread "in attesa" o "sospeso" è ancora considerato, tecnicamente, attivo?Cosa definisce un thread "attivo"?
risposta
Da quello che posso dire il termine "attivo" sembra essere usato molto ma non mai definito. Il metodo ThreadGroup.enumerate()
è documentata:
Copie nell'array specificato ogni thread attivo in questo gruppo di thread e suoi sottogruppi.
e da looking at the source for this, esso sta controllando il metodo Thread.isAlive()
e aggiungendo quelle a enumerable. Da ciò deduco che i termini "attivo" e "vivo" sono intercambiabili e "vivo" è definito come:
Un thread è attivo se è stato avviato e non è ancora morto.
In questo contesto prendo "attivo" per indicare che stanno eseguendo il codice. Thread inattivi - quelli che sono bloccati su chiamate I/O o in attesa di lock - consumano solo risorse di memoria senza influenzare la CPU (o solo marginalmente).
Tuttavia, dipende davvero da cosa stanno facendo i tuoi thread. Se ogni thread sta iterando su numeri per calcolare i primi, sono completamente vincolati alla CPU, e in realtà si dovrebbe avere solo uno per core per massimizzare il throughput. Se stanno facendo richieste HTTP o eseguono l'I/O di file, puoi permetterti di avere abbastanza per core.
Alla fine, una dichiarazione generale che copre tutti i thread in generale senza riguardo per quello che stanno facendo è abbastanza inutile.
Consiglio vivamente il libro Java Concurrency in Practice per un trattamento di alta qualità dell'argomento della programmazione Java simultanea.
La parola "attivo" viene utilizzata in senso inglese normale qui.
Un normale significato inglese della parola attiva è "fare qualcosa". Quindi, un significato intuitivo di "attivo" per i thread è che in realtà sono in esecuzione o sono pronti per essere eseguiti.
Nel contesto di questa citazione:
"è generalmente accettabile per avere 4 - 20 fili attivi per core"
la parola "attivo" viene utilizzata coerentemente con questo , anche se dovrei cavillare con i numeri. (20 è piuttosto alto, IMO).
Tuttavia, direi che si tratta di una dichiarazione intenzionalmente vaga. Il dare via è l'uso della frase di donnola "è generalmente accettato" (piuttosto che citare fonti specifiche) e l'ampio intervallo ("4 - 20"). Quindi, potresti affermare che la parola "attivo" è un altro esempio di vaghezza intenzionale.
IMO, l'autore della citazione sta cercando di far notare in generale che "troppi thread sono cattivi" ... senza essere precisi su cosa sia "too many". Estrarre una guida più precisa legando ciò che intende con "attivo" è inutile.(E per essere chiari, non è possibile dire quanti "troppi" è ... in generale.)
Date un'occhiata a java.lang.Thread.State
In altri non Sistemi Java, attivo equivale a "RUNNABLE". Un task/processo/thread è attivo se è in grado di eseguire attivamente il codice. È sospeso se non lo è (blocco, ecc.)
Come ha detto Stephen C, active è usato più come inglese piuttosto che Java qui.
"È generalmente accettabile disporre di 4-20 thread attivi per core". - Adam Tannon
In questo senso penso che la parola significhi "ready to run" piuttosto che "vivo" o uno qualsiasi degli altri significati possibili. Ha senso non avere più di una manciata di thread sulla coda pronta, perché non si ottiene alcun valore per i thread in attesa e si contribuisce alla pianificazione e al sovraccarico dell'interruttore di contesto. D'altra parte, se si dispone di un numero inferiore di thread ready-to-run rispetto ai core, non si sta facendo uso della risorsa disponibile.
http://stackoverflow.com/questions/3275210/what-is-the-thread-state-of-a-thread-after-thread-yield – andersoj
- 1. Cosa definisce operator()()?
- 2. Quando è attivo un thread Java?
- 3. Cosa sono i thread (cos'è un thread)?
- 4. Cosa definisce "Dati privati" in VMMAP?
- 5. Cosa significa "unire" un thread?
- 6. Cosa si definisce ([, funzione]) in JavaScript?
- 7. Come ottenere il conteggio thread attivo?
- 8. Cosa succede agli altri thread quando un thread si biforca()?
- 9. .NET: rispetto a AssemblyVersion, cosa definisce la compatibilità binaria?
- 10. Cosa definisce il tradizionale concetto di "pagina" in MVC?
- 11. C++ definisce un tipo pressofuso
- 12. Che cosa significa POSIX che un thread è "sospeso"?
- 13. Cosa fa boost :: thread sleep()?
- 14. Oracle Query - Missing Definisce
- 15. Cosa definisce un tipo opaco in C e quando sono necessari e/o utili?
- 16. Cosa succede quando un thread .NET genera un'eccezione?
- 17. Che cosa significa thread safe in un contesto PHP?
- 18. Cosa fa un thread dopo aver chiamato wait() in Java?
- 19. definisce un sinonimo per una macro Clojure
- 20. che definisce un segnale post_migrate personalizzato
- 21. Cosa c'è di meglio: selezionare vs thread?
- 22. Cosa sono le sezioni critiche nei thread
- 23. Cosa fa il thread in background GDI +?
- 24. Cosa significa Thread Local Objects in Flask?
- 25. A cosa serve la sicurezza senza thread?
- 26. uwsgi: cosa definisce il numero di lavoratori/processi di cui un'app django ha bisogno?
- 27. Mantieni attivo un servizio WCF sotto IIS
- 28. Cosa significa thread locale nel framework Flask?
- 29. Codeigniter definisce basepath o exit
- 30. Che cosa è più consigliabile creare un thread estendendo una classe Thread o implementando Runnable?
Qual è il contesto in cui appare "attivo"? È un termine troppo generico per fornire una definizione difficile con così poche informazioni. –
"È generalmente accettabile disporre di 4-20 thread attivi per core". – IAmYourFaja
Un thread 'java' attivo è un thread che * può * essere il thread di esecuzione attualmente in esecuzione. È un thread che ha lasciato lo stato "nuovo" e ha raggiunto (o riottenuto) lo stato "eseguibile". I thread attivi occupano la residenza nel pool di thread eseguibile. È un errore comune per il termine sensibile al contesto * attivo * da prendere come "il thread eseguibile attualmente in esecuzione". – 8bitjunkie