2010-03-13 17 views
11

Cosa rende gli attori così leggeri?Scala: Perché gli attori sono leggeri?

Non sono nemmeno sicuro di come funzionano. Non sono thread separati?

+0

Vorrei aggiungere a questa domanda: Quanto sono leggeri gli attori di Scala? – ziggystar

+0

@ziggystar Da quello che ho capito, gli attori sono solo compiti a livello di oggetto.Immagino che "quanto leggero" dipenda principalmente dalle dimensioni della sua "casella di posta". – someguy

risposta

17

Quando dicono "leggero" significano che ciascun attore non è mappato su un singolo thread.

JVM offre condivisa discussioni memoria con serrature come la prima forma di astrazioni concorrenza. Ma i thread di memoria condivisi sono piuttosto pesanti e incorrono in severe penali per le prestazioni dal cambio di contesto. Per un'implementazione attore basa su una mappatura one-to-one con fili JVM, il payload processo per Scala attore non sarà così leggero che possiamo generare un milione di casi di un attore per un calcolo preciso. Quindi attori Scala sono stati progettati come oggetti evento leggeri, che vengono programmati ed eseguiti su un sottostante piscina thread di lavoro che ottiene ridimensionato automaticamente quando tutte thread bloccano sulla lunga corsa operazioni. Infatti, Scala implementa un modello unificato di attori - basato su thread e basato su eventi. Gli attori Scala offrono due meccanismi di sospensione: meccanismi di sospensione: uno stack completo sospensione (implementato come ricezione) e una sospensione basata su una chiusura di seguito (implementata come reagire). Nel caso di attori basati su eventi, un'attesa sulla reazione è rappresentata da una chiusura , ovvero una chiusura che cattura il resto del calcolo dell'attore. Quando l'attore sospesa riceve un messaggio che corrisponde a uno dei modelli specificati nel attore, il seguito viene eseguito programmando il compito di uno dei thread di lavoro dalla piscina filo conduttore. Il paper "Gli attori che unificano i thread e gli eventi " di Haller e Odersky discute i dettagli dell'implementazione .

Source

+0

Se viene lanciata un'eccezione, solo l'attore (e non il thread sottostante) morirà giusto? – someguy

+0

@someguy - Penso che in realtà dipenda dall'implementazione del pool di thread, ma sì. – ChaosPandion

0

importante riferimento Actors that Unify Threads and Events

non credo che dobbiamo rafforzare quell'attore è che leggero.

innanzitutto gli attori basati su thread sono attori per thread, quindi non sono affatto leggeri.

Gli attori basati su eventi sono il punto in cui iniziamo a percepire che gli attori sono leggeri. è leggero perché non ha thread di attesa e passa a un altro, il thread di lavoro passa semplicemente da un lavoro di dati a un altro pezzo di lavoro di dati, quindi continua a girare su calcoli efficaci.

Problemi correlati