我正致力于基因编程项目,该项目试图生成代表图像的GP。我的方法是将图像分成不同的独立部分,并使用单独的线程对它们进行演化工作。
由于事情将是异步的,因此您自然也希望对象也是独立的。问题是我注意到JGAP中的某些对象实际上是共享变量,所以它们将在线程之间共享,这会导致很多问题。例如,我注意到所有具有相同名称的Variables都是相同的,这意味着如果我想同时评估多个IGPProgram,我必须锁定变量,这可能真的妨碍表现。
我还注意到,如果您尝试创建多个GPConfiguration,程序会抱怨您必须先重置它。所以在我看来,所有GPConfiguration都是共享的(即你不能让多个线程同时创建多个配置),这是一个问题,因为创建GPProblems需要花费很多时间,而且我正在创建很多GPProblems,所以我希望减少将工作分成多个线程所花费的时间。
有没有"陷阱"在使用JGAP和线程时我需要知道什么?遗憾的是,多线程在JGAP文档中没有涉及太多,我希望我能从那些可能有JGAP经验的人那里得到一些建议。
答案 0 :(得分:3)
根据FAQ,JGAP“确实支持多线程计算”。但是,这并不意味着整个API /对象图完全是线程安全的。您是否有代码示例来演示您遇到的问题?我不认为你会在没有提炼问题的情况下得到规范的答案。
examples/src/examples/simpleBooleanThreaded
下的JGAP distribution zip中有一个线程示例。
答案 1 :(得分:2)
如果你想要一些变量不跨线程共享,并做一些小改动让代码支持多线程。你可以使用ThreadLocal.