Skip to content

parallelism_homework#1

Open
rogozhinski wants to merge 2 commits intokincajou:masterfrom
rogozhinski:master
Open

parallelism_homework#1
rogozhinski wants to merge 2 commits intokincajou:masterfrom
rogozhinski:master

Conversation

@rogozhinski
Copy link

К сожалению, домашка пока сыровата и уже за дедлайном, так как меня "сожрал" выпускной проект. Но я все равно хотел бы ей заняться, так как очень захватила тема параллельных вычислений.
Хотел реализовать тредпулы (чтобы избежать неконтроллируемого роста количества тредов), но не получилось: почему-то треды, загруженные в ExecutionService, запускались последовательно, что странно. Буду продолжать работу.

@rogozhinski rogozhinski changed the title the first attempt parallelism_homework Mar 28, 2019
@rogozhinski
Copy link
Author

rogozhinski commented Mar 28, 2019

Ввел тредпулы для рекурсивного перебора папок и для асинхронного похода на гугл: код заработал достаточно шустро.

Но появилась проблема с завершением программы (она также описана в комментариях к коду): несмотря на то что все вычисления завершаются успешно, программа не заканчивается с кодом 1. То есть недобит какой-то тред (и этот тред явно из ForkJoinPool, так как проблема появилась еще до асинхронных походов на гугл).

Было бы интересно узнать, каким образом возможно исправить этот недостаток.

for (Path filePath : Files.newDirectoryStream(dirPath)) {
if (Files.isDirectory(filePath)) {
DirAction nestedDirAction = new DirAction(filePath);
nestedDirAction.fork();
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

результат этой операции надо сохранить и в конце этого метода их всех дождаться, поэтому проблемы с выходом из программы

} finally {
// даже несмотря на этот join какой-то тред не закрывается
// даже после проведения всех требуемых вычислений :(
this.join();
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это кажется не нужно

}

private void outputStringAssemble () {
SearchCall searchCall = new SearchCall(dirPath);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вот эти классы должны быть тоже тасками и их надо форкать а потом джойнить

testCount();
testSearch();
}
Path path = Path.of("C:\\1_Konstantin\\1_hh\\concurrency\\hh-school-1\\" +
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это надо было бы в агрументы

@kincajou
Copy link
Owner

домашку принял, времени подробно в несколько итераций пофиксить не хватает, общие замечания написал

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants