4

저는 이미지를 나타내는 GP를 생성하려고하는 Genetic Programming 프로젝트를 진행하고 있습니다. 내 접근 방식은 이미지를 다른 독립 섹션으로 분할하고 별도의 스레드를 사용하여 이미지를 전개하는 것입니다.JGAP에서 멀티 스레딩을 사용하는 것과 관련하여 알아야 할 "잡았다"가 있습니까?

상황이 비동기식이 될 것이므로 자연스럽게 개체가 독립적이기를 원할 것입니다. 문제는 JGAP의 특정 객체가 실제로 공유 변수이므로 스레드간에 공유되므로 많은 문제가 발생할 수 있다는 점입니다. 예를 들어, 동일한 이름의 모든 Variables이 동일하다는 것을 알았습니다. 즉, 하나 이상의 IGP 프로그램을 동시에 평가하려면 변수를 잠글 필요가있어서 성능을 저해 할 수 있습니다.

하나 이상의 GPConfiguration을 만들려고하면 프로그램이 먼저 재설정해야한다는 메시지가 표시됩니다. 이것은 나에게 모든 GPConfigurations가 공유되는 것입니다 (즉, 여러 스레드가 동시에 여러 구성을 작성할 수는 없습니다). 문제는 GPProblems를 작성하는 데 많은 시간이 걸릴 수 있기 때문에 문제가됩니다. GPProblems가 많이 생성됩니다. 그래서 작업을 여러 스레드로 분할하는 데 걸리는 시간을 줄이기를 바랬습니다.

JGAP 및 스레드로 작업 할 때 알아야 할 "잡았다"가 있습니까? 안타깝게도 JGAP 문서에서 멀티 스레딩을 너무 많이하지 않았으므로 JGAP에 경험이있는 사람들로부터 조언을 얻기를 바랍니다.

답변

2

일부 변수를 쓰레드간에 공유하지 않으려면 코드를 약간 변경하여 코드가 멀티 스레드를 지원하도록합니다. 당신은 ThreadLocal.

When and how should I use a ThreadLocal variable?

+0

JGAP에서 아주 오래 전부터 작업을 마쳤지 만,이 정보는 매우 유용합니다. 그러나 앞으로 멀티 스레딩을 사용할 때 유용합니다. – 9a3eedi

3

FAQ에 따르면 JGAP는 "다중 스레드 계산을 지원합니다". 그러나 이것이 전체 API/객체 그래프가 완전히 스레드 안전하다는 것을 의미하지는 않습니다. 현재 가지고있는 문제를 나타내는 코드 샘플이 있습니까? 나는 당신의 질문을 약간 수정하지 않고 표준적인 대답을 얻지 못할 것이라고 생각합니다.

JGAP distribution 우편 번호 examples/src/examples/simpleBooleanThreaded에 스레드가있는 예가 있습니다.

+0

를 사용하여 수 그것은 지금은 JGAP 내 프로젝트를 진행하고 있었고, 난 그래서 난 아주 잘 기억이 안나요 월 이후 완료했지만, 일반적으로 내가 몇 가지를 발견 이후 오랜만이다 멀티 쓰레딩을 방해하는 여기저기서 공유 변수들, 그리고 나는 그것들을 잠그기 위해서 또는 가능하다면 그것들을 인스턴스화하는 어떤 방법을 찾는다. 그것은 많은 것을 느려지 게했다. 다중 스레드 예제를 읽는 것은 많은 도움이되었습니다. – 9a3eedi