IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Executer 2 fonctions simultanement


Sujet :

Caml

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Executer 2 fonctions simultanement
    Bonjour a tous,
    J'aurai besoin d’exécuter deux fonctions simultanément en ocaml et je me demandais si cella était possible.
    J'ai fait des recherches et j'ai trouvé le module Thread qui permet d'exprimer la concurrence. J'ai regardé quelques exemples, consulté
    la doc et fais quelques tests mais ça n'a pas été très concluant.
    Donc voila si quelqu'un pourrait m'expliquer le fonctionnement des threads ou me diriger vers un tuto ou une explication assez simple pour debutant je lui en serait reconnaissant
    Merci d'avance !

  2. #2
    Membre régulier
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 102
    Points : 110
    Points
    110
    Par défaut
    Salut,

    Le parallélisme (plusieurs fonctions s'exécutant simultanément sur un processeur multicore) n'est pas possible en OCaml pour le moment -- mais il y a plusieurs personnes qui travaillent dessus donc ça devrait se faire un jour. En attendant, il y a déjà plusieurs projets qui permettent de le faire (du moins c'est ce qu'on dirait lisant leur description). Exemples :
    Pour ce qui est de la concurrence en revanche, c'est possible. Effectivement tu peux utiliser les threads, mais il existe plusieurs librairies tierces pour faire ça (je pense que tu peux regarder du côté de Lwt : http://ocsigen.org/lwt/ et de Async : https://realworldocaml.org/v1/en/htm...ith-async.html

    Si tu ne penses pas avoir besoin de plus de ce que la librairie standard fournit, tu peux lire ça, qui est relativement facile à comprendre même pour quelqu'un qui comme moi ne connaît rien à tous ces machins : http://ocamlunix.forge.ocamlcore.org/

    Enfin, il y a une dernière options, c'est d'utiliser des processus différents. Ca force la duplication de la mémoire mais après c'est l'OS qui gère les processus donc ça permet d'utiliser des processeurs multicores... Là encore, tu trouveras une présentation très claire dans Unix system programming in OCaml.

    Si tu trouves ce que tu cherches, fais moi signe car je suis également intéressé par ce genre de machin (à part que comme je n'en avais pas vraiment besoin, je n'ai jamais eu le courage de me pencher dessus vraiment et de résoudre mes problèmes...)

    Bonne chance !

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci drunskater, je vais m'y pencher même si je pense que ça risque de me prendre un peu de temps car je n'y connait vraiment rien.
    Donc concrètement le module Thread ne permet pas de faire un semblant de parallélisme ? Je n'ai pas vraiment saisi la différence avec la concurrence

  4. #4
    Membre régulier
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 102
    Points : 110
    Points
    110
    Par défaut
    Salut,

    la différence entre concurrence et parallélisme est très simple : un processeur c'est un peu comme un humain, il peut faire qu'un seul calcul à la fois. En revanche, il va de soit que plusieurs humains peuvent faire plusieurs calculs en même temps. Étant donné cela :

    Concurrence : Quand tu lances plusieurs programmes en même temps et que, globalement, ils donnent l'impression d'être fait en même temps. Par exemple, sur un processeur n'ayant qu'un seul core, tous les programment tournent "en même temps", mais en réalité le processeur ne traite que l'un d'entre eux à la fois. Ce qui se passe, c'est qu'il exécute un peu un programme, puis un peu un autre, etc... Un peu comme si tu faisais deux calculs "en même temps" en faisant deux lignes de l'un, puis deux lignes de l'autre, etc.

    Parallélisme : Les programmes s'exécutent réellement en même temps. Ce n'est pas possible sur un simple processeur, il faut un processeur multicore. Un peu comme si un ami à toi et toi vous faisiez deux calculs en même temps : toi tu fais le calcul numéro 1, lui le calcul numéro 2. La vous allez vraiment aller deux fois plus vite que si t'étais tout seul.

    Pour l'instant, le module "Thread" de OCaml ne permet de faire que de la concurrence. Donc c'est bien un "semblant" de parallélisme, au sens que l'utilisateur aura l'impression que plusieurs trucs tournent en même temps. Par contre, si tu a un processeur dual / quad core, ça ne divisera pas ton temps de calcul par 2 / 4...

    En tous cas bonne chance si tu te lances là dedans, c'est pas forcément facile... (je dis pas ça pour te décourager hein !)

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Ça marche, merci pour ton explication très claire !
    Je vais voir ce que je peut faire avec le module Thread je pense que ce sera suffisant

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/10/2005, 22h47
  2. [VBA] Executer une fonction en passant son nom en argument
    Par David Guyon dans le forum Access
    Réponses: 4
    Dernier message: 05/10/2005, 19h56
  3. executer une fonction à la fermeture d'une fenêtre
    Par Oluha dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/02/2005, 09h46
  4. 2 fonctions simultanées
    Par olivoliv dans le forum C++
    Réponses: 4
    Dernier message: 24/11/2004, 19h44
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo