O thread IronRuby ScriptSource.Execute é seguro?
-
21-09-2019 - |
Pergunta
Implementamos o avaliador de expressão por meio do mecanismo IronRuby de hospedagem.Versão simplificada do avaliador que você pode ver aqui.
Agora estamos tentando obter mais desempenho do IronRuby através da execução de expressões em vários threads (e conseguimos).Uma questão nos incomoda: o thread do método Execute é seguro?
Solução
ScriptRuntime
, ScriptEngine
, e ScriptScope
são todos thread-safe, projetados para serem usados entre threads.Especificamente, ScriptScope
usa um armazenamento de dados seguro para threads, então ScriptScope
pode ser compartilhado entre threads.
Se você fornecer seu próprio escopo para execução de scripts, precisará garantir que o armazenamento de dados do escopo seja seguro para threads.Além disso, ao alterar dados em um ScriptScope
, a segurança do thread é garantida pelo bloqueio, portanto, esteja ciente de que muitos threads diferentes alteram um arquivo compartilhado ScriptScope
degradará o desempenho.A leitura de dados de um ScriptScope não bloqueia.