【问题标题】:Are there any "gotchas" I should know about with regards to using multithreading in JGAP?关于在 JGAP 中使用多线程,我应该知道任何“陷阱”吗?
【发布时间】:2012-04-25 23:56:33
【问题描述】:

我正在从事一个遗传编程项目,该项目试图生成代表图像的 GP。我的方法是将图像分成不同的独立部分,并让单独的线程对它们进行进化工作。

由于事情将是异步的,自然你也希望对象是独立的。问题是我注意到 JGAP 中的某些对象实际上是共享变量,因此它们将在线程之间共享,这会导致很多问题。例如,我注意到所有具有相同名称的Variables 都是相同的,这意味着如果我想同时评估多个 IGPProgram,我必须锁定变量,这确实会影响性能。

我还注意到,如果您尝试创建多个 GPConfiguration,程序会抱怨您必须先重置它。所以在我看来,所有 GPConfigurations 都是共享的(即你不能让多个线程同时创建多个配置),这是一个问题,因为创建 GPProblems 可能需要很多时间,而我正在创建很多 GPProblems ,所以我希望通过将工作分成多个线程来减少所花费的时间。

在使用 JGAP 和线程时,我是否需要了解任何“陷阱”?不幸的是,JGAP 文档中没有过多地涉及多线程,我希望我能从可能有 JGAP 经验的人那里得到一些建议。

【问题讨论】:

    标签: java multithreading synchronization genetic-programming jgap


    【解决方案1】:

    根据FAQ,JGAP“确实支持多线程计算”。然而,这并不意味着整个 API/对象图是完全线程安全的。您是否有演示您遇到的问题的代码示例?我认为如果不稍微完善您的问题,您将不会得到规范的答案。

    examples/src/examples/simpleBooleanThreaded 下的JGAP distribution zip 中有一个线程示例。

    【讨论】:

    • 自从我用 JGAP 做我的项目以来已经有一段时间了,我从 5 月开始就完成了,所以我记不太清了,但总的来说我在这里找到了一些共享变量和那里干扰了多线程,我只是确保锁定它们,或者如果可能的话找到一些实例化它们的方法。但是,它使事情变慢了很多。阅读多线程示例确实很有帮助。
    【解决方案2】:

    如果您希望某些变量不跨线程共享,并进行细微更改以使代码支持多线程。你可以使用ThreadLocal.

    When and how should I use a ThreadLocal variable?

    【讨论】:

    • 谢谢,这是非常有用的信息,虽然很久以前我已经完成了我在 JGAP 中的工作,但它对将来与多线程一起使用很有好处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多