3

Nous sommes implémentés évaluateur d'expression via l'hébergement du moteur IronRuby. Version simplifiée de l'évaluateur, vous pouvez voir here.Est-ce que le thread IronRuby ScriptSource.Execute est sûr?

Maintenant, nous essayons d'obtenir plus de performance de IronRuby en exécutant des expressions dans beaucoup de threads (et nous l'avons eu). Une question nous dérange: la méthode Execute thread est-elle sûre?

Répondre

5

ScriptRuntime, ScriptEngine, et ScriptScope sont tous thread-safe, conçus pour être utilisés entre les threads. Plus précisément, ScriptScope utilise un magasin de données thread-safe, donc ScriptScope peut être partagé entre les threads.

Si vous fournissez votre propre étendue pour l'exécution des scripts, vous devez vous assurer que le magasin de données de l'étendue est compatible avec les unités d'exécution. En outre, lors de la mutation de données dans un ScriptScope, la sécurité des threads est assurée par le verrouillage, donc soyez conscient que de nombreux threads différents mutant un ScriptScope dégraderont les performances. La lecture des données d'un ScriptScope ne se verrouille pas.

+0

merci, maintenant c'est clair pour moi. –

+0

bien que cela tue nos performances ( –

+0

Pourquoi utilisiez-vous des threads pour perf, et comment l'avez-vous vu se dégrader? –