10

L'attesa e la notifica sembrano messaggi che vengono passati tra i thread, se ciò è vero devono esserci code per il buffering di questi messaggi. In tal caso, devono esserci operazioni atomiche per l'aggiunta di messaggi e la rimozione del messaggio dalla coda, inoltre deve esistere un thread di supporto per ogni thread Java che ascolta tali messaggi?Come funziona l'attesa/notifica a livello JVM?

Sarebbe bello sentire i tuoi pensieri.

risposta

0

La JVM utilizza le primitive fornite dal sistema operativo o talvolta da una libreria di terze parti. Nessuna JVM implementa queste cose da sé. Le JVM di Windows in genere utilizzano i thread di Windows, mentre su Linux, un'implementazione può utilizzare sia i thread del kernel Linux che la libreria POSIX Threads (pthreads). In Mac OS X, le scelte includono pthreads o del cacao NSThread biblioteca

1

Wait e notificare sembrano i messaggi che sono passati tra i thread,

In realtà non sono i messaggi. Quando un thread chiama wait() si inserisce nella coda di attesa associata al monitor dell'oggetto particolare. Quando un altro thread chiama notify(), estrae il primo thread (se presente) dalla coda e lo inserisce nella coda "Esegui". Riguarda il cambiamento nello stato del thread e il mettere un thread in una coda non i messaggi tra i thread.

Se è così allora ci deve essere operazioni atomiche per l'aggiunta di messaggi da e rimuovere il messaggio dalla coda

Molto probabilmente ci sono non operazioni atomiche in giro per le code di messaggi, ma ci sono operazioni di certo atomiche in giro per il test/impostazione delle posizioni di memoria che consentono di ottenere blocchi e risolvere altri conflitti di thread.

ci deve essere un thread di supporto per ogni thread Java che ascolta questi messaggi?

v'è certamente non un filo di supporto per ogni thread Java. Poiché i thread Java passano da uno stato all'altro o sono suddivisi in base al tempo, hanno come thread del sistema operativo che mantiene il suo stato e fa tutto il messaging e il signaling. Con la maggior parte (se non tutte) le implementazioni che hanno anche il sistema operativo e l'hardware che si prende cura della programmazione dei thread lasciando il codice nativo JVM per eseguire la contabilità Java.