Il BEAM esegue il codice Erlang in thread speciali chiama schedulers. Per impostazione predefinita, avvierà uno scheduler per ogni core del processore. Questo può essere controllato e il tempo di avvio, ad esempio se non si desidera eseguire Erlang su tutti i core, ma "riservare" alcuni per altre cose. Normalmente quando si esegue un'operazione di I/O su file, questa viene eseguita in un programma di pianificazione e, poiché le operazioni di I/O su file sono relativamente lente, bloccano lo scheduler mentre sono in esecuzione. Che può influenzare le proprietà in tempo reale. Normalmente non si esegue molto l'I/O di file, quindi non è un problema.
Il pool di thread asincrono sono thread del sistema operativo utilizzati per operazioni I/O. Normalmente il pool è vuoto ma se si utilizza lo +A
all'avvio, BEAM creerà thread in più per questo pool. Questi thread verranno quindi utilizzati solo per le operazioni di I/O dei file, il che significa che i thread del programma di pianificazione non blocceranno più l'attesa per l'I/O del file e le proprietà in tempo reale vengono migliorate. Ovviamente questo costa quanto i thread del sistema operativo non sono gratuiti. I thread non si mescolano in modo che i thread dello scheduler siano solo thread di pianificazione e i thread asincroni siano solo thread asincroni.
Se si scrivono i driver collegati per le porte, è possibile utilizzare anche il pool di thread asincroni. Ma devi scoprire quando sono stati avviati da soli.
Quante ne avete bisogno dipende dalla vostra applicazione. Per impostazione predefinita, nessuno viene avviato. Come @demeshchuk, ho anche sentito che a Riak piace avere un grande pool di thread asincroni mentre aprono molti file. Il mio unico consiglio è provarlo e misurare. Come con tutte le ottimizzazioni?