Skip to content

Conversation

@bykoianko
Copy link
Contributor

@bykoianko bykoianko commented Oct 7, 2020

Данный PR реализует прототип алгоритма A*, который работает в 2 потока

Детали реализации:

  1. Алгоритм работает в 2 потока прямая и обратная волна в своих потоках, а как только волны сходятся (первое касание) алгоритм начинает работать в одни поток, как и раньше, чтоб не ставить синхронизацию на большое кол-во структур данных;
  2. Очередь защищена мютексом. Вроде на ней особого расхода не было. Для получения входящих и исходящих ребер в классы графа внесены существенные изменения. Сделаны отдельные кеши для входящих и исходящих ребер, чтоб уменьшить объемы синхронизируемых данных;

Результаты тестов. Три прокладки подряд, с одними и теми же стартами и финишами:
MacOS:
Виден ощутимый прирост скорости. Было 17 сек стало 10 сек.
Москва - Тверь (200920) MacOS
55.750441, 37.617514; 57.036356, 34.965072 (bicycle)
В 2 потока ms
12342, 10769, 10678

В 1 поток ms
19641, 17767, 16435

Москва - Рязань (200920)
55.750441, 37.617514; 54.806649, 39.861445 (pedestrian)

В 2 потока
12682ms, 9309ms, 9156ms
10.7602 s, 9.31902 s, 9.34944 s

В 1 поток ms
15394, 14530, 14560
17.7066 s, 14.7042 s, 14.5302 s

Android s10e
Стало медленнее. Было 4 секунды, стало 5.
(55.796456, 37.536991; 55.592107, 37.673773) 200822
2 потока. Андроид.
4.88698 s
4.90258 s
4.80515 s

В 1 поток
4.11945 s
3.92234 s
3.97615 s

iPhone SE
Стало медленнее. Было 4 секунды, стало 5.
(55.860735, 37.436494; 55.621144, 37.743771) 200822
2 потока.
29.8465 s
27.3 s
27.8736 s
27.7563 s

В 1 поток
23.8147 s
21.8057 s
21.4761 s

Сейчас пробую убрать синхронизацию с обращения к графу дорог. На iPhone SE вместо 3 секунд получается проложить за 2.

Время прокладки маршрута можно определить при помощи поиска по:
~ScopedTimerWithLog() ***FindPath*** time:

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.

1 participant