2013-05-02 14 views
11

Sembra che molte persone stiano dicendo che OCaml non ha una buona capacità di concorrenza e che non va bene anche per le applicazioni web server.Perché il threading di OCaml è considerato come `non sufficiente '?

Attualmente sto imparando ocaml's manual. Sembra che OCaml fornisca la concorrenza ora.

Posso sapere perché la concomitanza/threading di OCaml è considerata negativa?

È possibile sviluppare un'applicazione server in OCaml? Quali problemi posso incontrare?

risposta

14

Vedere Concurrency vs. parallelism — What's the difference?. I thread di OCaml offrono la concorrenza, poiché è possibile avviare la funzione successiva prima che sia terminata quella precedente. Ma OCaml non offre il parallelismo, quindi quando inizia la seconda funzione, la prima deve essere messa in attesa. Due thread non possono essere eseguiti simultaneamente, quindi più calcoli associati alla CPU in un processo si bloccheranno a vicenda e non è possibile ridurre al massimo tutti i core della CPU in un unico processo.

Questo è il manzo della gente con la filettatura di OCaml. Significa che non puoi usare OCaml per qualcosa come un server? No. È qualcosa che dovrai tenere in considerazione nella progettazione del tuo server, ma generalmente non è un ostacolo. Heck, Node.js è straight-up single-thread, ma il suo scopo principale è la creazione di server.

+2

Oh, Node.js è single-threaded? ma come può Node.js utilizzare più cpu? –

+4

@JacksonTale: si esegue un cluster di processi Node per utilizzare completamente più core CPU. – Chuck

+1

ok, capisci ora. ma per quel gruppo di processi di nodo, ognuno di essi occupa una porta? e lì c'è un bilanciatore del carico? potresti per favore dirmi il design dell'architettura? –

8

OCaml supporta l'utilizzo di più thread. Ma solo un thread ocaml può essere eseguito in un determinato punto nel tempo, non c'è mai un parellelismo di diversi thread ocaml.

Tuttavia:

  • si può sborsare/utilizzare più processi.

  • codice esterno (ad esempio librerie esterne c/C++) può essere eseguito in parallelo, purché la loro interazione con il runtime ocaml sia controllata correttamente.

PS: il documento collegato non è il manuale di ocaml. È un buon libro, ma datato su OCaml.

Appendice: Ovviamente, è possibile sviluppare server in ocaml (esempio dal vivo: ocsigen - a web server). Dipende dai tuoi bisogni, se la mancanza di concurreny thread reale è una caratteristica o uno svantaggio.

Problemi correlati