У нас очень странная проблема, нам удается создать очень маленький, воспроизводимый (на некоторых ПК) пример: main.cpp Dockerfile Этот код абсолютно бесполезен, он только регистрирует малострок, но эти несколько строк доказывают, что он не работает с более чем 1 потоком.
Мы используем boost 1.70 (Asio 1.14.0)
Я тестировал на 3 компьютерахдо сих пор:
мой рабочий стол Ryzen 1950X 64 ГБ ОЗУ в основном заканчивается:
started for 1 threads
Listener started on thread: 140593064609536
started for 2 threads
started for 3 threads
started for 4 threads
started for 5 threads
started for 6 threads
started for 7 threads
(иногда 2 или 3 тоже работает, но в основном нет) Я тестировал на этой машине также сборкус msvc на Windows, и результат был в том, что он работает нормально, поэтому проблема как-то связана с linux + подсчетом ядра.
главный сервер 2x E5-2630 v3 128 ГБ ОЗУ в основном заканчиваются:
root@cf8c892390ce:/app/test/bin# ./test
started for 1 threads
Listener started on thread: 140062574507776
started for 2 threads
started for 3 threads
started for 4 threads
started for 5 threads
started for 6 threads
started for 7 threads
(однажды из более чем 100 тестов 2 также работали, но никогда больше)
старый тестовый сервер 2x старый процессор Intel 2 core 4 ГБ ОЗУ большинство результатов выглядит следующим образом:
root@f06821a4cbc8:/app/test/bin# ./test
started for 1 threads
Listener started on thread: 140650646316800
started for 2 threads
Listener started on thread: 140650621138688
started for 3 threads
Listener started on thread: 140650246829824
started for 4 threads
Listener started on thread: 140650213259008
started for 5 threads
Listener started on thread: 140649944823552
started for 6 threads
Listener started on thread: 140649743496960
started for 7 threads
Listener started on thread: 140649726711552
(иногда 5, 6 или 7 потоков не работают)
Мы тестировали на нескольких других системах и только1 поток работает надежно.
Можете ли вы взглянуть на код и сказать мне, есть ли там какая-то глупая ошибка? Или это ошибка в asio?
И самое главное, мы можем исправитьэто как-то?