Est-il possible d'exécuter des blocs de code sur plusieurs cœurs ? Par exemple pour les boucles et autres ? Si c'est possible sans trop de surcharge, pourquoi ne pas l'utiliser tout le temps ? Puis-je faire passer des variables sur plusieurs cœurs ?
Réponse
Trop de publicités?Oui, il est possible d'exécuter du code/blocs sur plusieurs cœurs, mais ce n'est pas aussi simple que cela. Par exemple, la structure de support doit être prête pour cela (aucune des structures de base comme le Array
, Hash
sont sûres pour les fils).
vous ne pouvez pas simplement (1..100).each { |i| puts i }
s'exécuter en mode multithread sans que le résultat soit différent (imprévisible) de celui obtenu en mode single thread.
dans le cas de variables dont vous devez synchroniser l'accès ou utiliser des structures thread-safe si elles sont destinées à être partagées entre des threads.
Peut-être que dans votre cas, je ne commencerais pas sur un terrain vierge, ces concepts et certaines des pratiques de référence pour la programmation concurrente sont disponibles en utilisant le site Web de l'UE. concurrent-ruby gemme.
pour exécuter des blocs en parallèle, renseignez-vous sur exécuteurs/thread-pools
il y a aussi structures sécurisées pour les fils si vous êtes intéressé par le partage "sûr" de variables entre les threads (CR a essayé d'introduire un modèle de mémoire car Ruby n'en a pas d'officiel - JRuby a quelques garanties, par exemple, les variables de classe sont volatiles - les changements sont visibles entre les threads)