Есть ли какие-то "ошибки", о которых я должен знать в отношении использования многопоточности в JGAP?
Я работаю над проектом по генетическому программированию, который пытается генерировать GP, которые будут представлять изображение. Мой подход состоит в том, чтобы разделить изображение на разные независимые секции, и отдельные потоки выполняют над ними работу по эволюции.
Поскольку все будет асинхронно, естественно, вы бы хотели, чтобы объекты также были независимыми. Проблема в том, что я заметил, что некоторые объекты в JGAP на самом деле являются общими переменными, поэтому они будут разделены между потоками, и это вызовет много проблем. Например, я заметил, что все переменные с одним и тем же именем одинаковы, что означает, что если бы я хотел оценивать более одной IGPProgram одновременно, мне пришлось бы заблокировать переменную, что могло бы реально снизить производительность.
Я также заметил, что если вы попытаетесь создать более чем одну конфигурацию GP, программа будет жаловаться на то, что вам придется сначала сбросить ее. Так что мне кажется, что все GPConfigurations являются общими (т.е. вы не можете иметь несколько потоков, создающих несколько конфигураций одновременно), что является проблемой, потому что создание GPProblems может занять много времени, а я создаю много GPProblems Так что я надеялся сократить время, затрачиваемое на разделение работы на несколько потоков.
Есть ли какие-то "ошибки", о которых мне нужно знать при работе с JGAP и потоками? К сожалению, многопоточность не слишком затрагивается в документации JGAP, и я надеялся, что получу несколько советов от людей, которые могут иметь опыт работы с JGAP.
2 ответа
Если вы хотите, чтобы какая-то переменная не распределялась между потоками, внесите небольшие изменения, чтобы код поддерживал многопоточность. Вы можете использовать ThreadLocal.
Согласно FAQ, JGAP "поддерживает многопоточные вычисления". Тем не менее, это не означает, что весь граф API/ объект полностью потокобезопасен. У вас есть пример кода, который демонстрирует вашу проблему? Я не думаю, что вы получите канонический ответ, не уточнив немного вопрос.
В zip- дистрибутиве JGAP под examples/src/examples/simpleBooleanThreaded
,