代码之家  ›  专栏  ›  技术社区  ›  Joseph Anderson

为非线程安全代码构建工作线程池

  •  1
  • Joseph Anderson  · 技术社区  · 16 年前

    我有一个第三方库,由于使用了静态变量,它不是线程安全的。重写它不是一个选项。此库由接收大量同时调用的asp.net web服务使用。

    我目前将其包装在一个代理类中,该类使用锁来确保线程安全:

    private static readonly object oneThreadAtATimePlease = new object();
    public ISomething CalculateSomething(int someValue)
    {
        lock (oneThreadAtATimePlease)
        {
            return new UnsafeLibrary(someValue).DoSomething();
        }
    }
    

    性能很差,因为多个调用者必须等待锁定,但结果是正确的。

    我想通过运行这个库的多个实例来提高性能,每个实例都在自己的AppDomain中。这是否合理的做法?有什么好的示例代码可以推荐吗?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Matthias    16 年前

    您还可以尝试使用队列创建基于消息的应用程序。

    然后,多个线程可以对请求进行排队,一个线程可以处理该队列并将结果通知其他线程。 使用monitor类并不总是最快的方法。

    AppDomains是一个选项。但是,您必须处理IPC。

        3
  •  0
  •   Ariel    16 年前