mirror of
https://github.com/danog/psalm.git
synced 2024-11-27 04:45:20 +01:00
Improve shuffling
This commit is contained in:
parent
7e76d3386d
commit
e1e2ff3e57
@ -361,38 +361,38 @@ class Analyzer
|
|||||||
};
|
};
|
||||||
|
|
||||||
if ($pool_size > 1 && count($this->files_to_analyze) > $pool_size) {
|
if ($pool_size > 1 && count($this->files_to_analyze) > $pool_size) {
|
||||||
|
$shuffle_count = $pool_size + 1;
|
||||||
|
|
||||||
|
$file_paths = \array_values($this->files_to_analyze);
|
||||||
|
|
||||||
|
$count = count($file_paths);
|
||||||
|
$middle = \intdiv($count, $shuffle_count);
|
||||||
|
$remainder = $count % $shuffle_count;
|
||||||
|
|
||||||
|
$new_file_paths = [];
|
||||||
|
|
||||||
|
for ($i = 0; $i < $shuffle_count; $i++) {
|
||||||
|
for ($j = 0; $j < $middle; $j++) {
|
||||||
|
if ($j * $shuffle_count + $i < $count) {
|
||||||
|
$new_file_paths[] = $file_paths[$j * $shuffle_count + $i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($remainder) {
|
||||||
|
$new_file_paths[] = $file_paths[$middle * $shuffle_count + $remainder - 1];
|
||||||
|
$remainder--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$process_file_paths = [];
|
$process_file_paths = [];
|
||||||
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
|
|
||||||
foreach ($this->files_to_analyze as $file_path) {
|
foreach ($file_paths as $file_path) {
|
||||||
$process_file_paths[$i % $pool_size][] = $file_path;
|
$process_file_paths[$i % $pool_size][] = $file_path;
|
||||||
++$i;
|
++$i;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($process_file_paths as $pool_key => $file_paths) {
|
|
||||||
$count = count($file_paths);
|
|
||||||
$middle = \intdiv($count, 4);
|
|
||||||
$remainder = $count % 4;
|
|
||||||
|
|
||||||
$new_file_paths = [];
|
|
||||||
|
|
||||||
for ($i = 0; $i < 4; $i++) {
|
|
||||||
for ($j = 0; $j < $middle; $j++) {
|
|
||||||
if ($j * 4 + $i < $count) {
|
|
||||||
$new_file_paths[] = $file_paths[$j * 4 + $i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($remainder) {
|
|
||||||
$new_file_paths[] = $file_paths[$middle * 4 + $remainder - 1];
|
|
||||||
$remainder--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$process_file_paths[$pool_key] = $new_file_paths;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run analysis one file at a time, splitting the set of
|
// Run analysis one file at a time, splitting the set of
|
||||||
// files up among a given number of child processes.
|
// files up among a given number of child processes.
|
||||||
$pool = new \Psalm\Internal\Fork\Pool(
|
$pool = new \Psalm\Internal\Fork\Pool(
|
||||||
|
Loading…
Reference in New Issue
Block a user