powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Меня терзают смутные сомнения (про многопоточность)
13 сообщений из 13, страница 1 из 1
Меня терзают смутные сомнения (про многопоточность)
    #39625211
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, все работает, каждое из 4х ядер загружено на 90%, процесс отрабатывает почти в 4 раза быстрее чем однопоточный.
Но в выходном файле строки оказываются в точно том порядке, в котором они находятся в исходном. На .NET что с помощью
Код: c#
1.
System.Thread

что через
Код: c#
1.
Parallel.ForEach

у меня это никогда не получалось и выходной файл содержал входные строки в случайном порядке примерно сгруппированными по количеству ядер. Допустил ли я какие-то ошибки синхронизируя чтение из входного потока?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
            ifstream sourceStream(sourceFile.c_str());
            ofstream destStream(destFile.c_str());

            vector<thread> threadPool;

            for (unsigned int i = 0; i < thread::hardware_concurrency(); i++)
            {
                threadPool.emplace_back([&]
                {
                    static mutex sourceMutex, destMutex;
                    bool moreToRead = true;
                    while (moreToRead)
                    {
                        string plain, encrypted;

                        {
                            lock_guard<mutex> io_guard(sourceMutex);
                            moreToRead = (bool)getline(sourceStream, plain);
                        }

                        if (moreToRead)
                        {
                            Encryptor ss(plain, encrypted);

                            {
                                lock_guard<mutex> io_guard(destMutex);
                                destStream << encrypted << endl;
                            }
                        }
                    }
                });
            }

            for (auto &thread : threadPool) thread.join();



Макет входного файла:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
0	1234567890qwertyuiopasdfghjklzxcvbnm	1522771668
1	1234567890qwertyuiopasdfghjklzxcvbnm	1522771668
2	1234567890qwertyuiopasdfghjklzxcvbnm	1522771668
3	1234567890qwertyuiopasdfghjklzxcvbnm	1522771668
4	1234567890qwertyuiopasdfghjklzxcvbnm	1522771668
5	1234567890qwertyuiopasdfghjklzxcvbnm	1522771668
6	1234567890qwertyuiopasdfghjklzxcvbnm	1522771668
7	1234567890qwertyuiopasdfghjklzxcvbnm	1522771668
8	1234567890qwertyuiopasdfghjklzxcvbnm	1522771668
9	1234567890qwertyuiopasdfghjklzxcvbnm	1522771668
10	1234567890qwertyuiopasdfghjklzxcvbnm	1522771668

Когда я в однопотоке расшифровываю то, что зашифровал код выше, в консоль валится точно такой же порядок строк. Пробовал на 100,000 строках и все равно ни одного нарушения порядке. Пример блокировки мутексом брал с отсюда . Где я напорол?
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625215
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gobzo Kobler, создавать/уничтожать строки в цикле — как-то жирно.
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625218
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest,

безотносительно.

вопрос снимается, разглядел что маленький процент строк в случайном порядке.
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625227
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo Kobler,

Вообще, если время обработки одной записи больше чем в N (число потоков) раз больше времени ее чтения, то будет как раз такой эффект.
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625231
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo Kobler,

как это ужасно. Говорить на русском "потоки" и показывать код в котором одновременно присутствуют strams & threads.
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625233
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo KoblerНет, все работает, каждое из 4х ядер загружено на 90%, процесс отрабатывает почти в 4 раза быстрее чем однопоточный.
Выглядит почти идеально если всего 4 ядра без HT.

Ядер сколько? HT включен? Амдала не забывай.
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625238
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

просто 4 настоящих ядра

все пучком, просто после .NET файл настолько упорядочен, что я не разглядел что примерно после 2000й строки прмерно каждая 100я и 101я переставлены местами.

на .NET у меня порядок сразу начинался с 5, 2, 6, 7, 4, 1 и тому подобное - там потоки "разгоняются" постепенно, медленно и печально.
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625248
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне интересно зачем после .NET лезть в C/C++ ? Второе чуть-чуть быстрее если его поучить, но если тупо запускать похожий синтаксис, то можно тормоз получить.
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625255
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gobzo Kobler,

Фи, какая отвратительная рожа лямбда

Я кстати, не уверен, что внутри лямбды статик мутексы - это будут синглтоны
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625257
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

Я тоже не был уверен. Но похоже работает, раз после прогона файлов с 100 000 и 600 000 строк и сортировки результатов файлы совпадают.

А какова альтернатива лямбде? Там кучку всего захватывать приходится.
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625259
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625261
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЯ кстати, не уверен, что внутри лямбды статик мутексы - это будут синглтоны
Почему вдруг? Лямбды - это обычные функции. Поведение static переменных там такое же как и везде.
...
Рейтинг: 0 / 0
Меня терзают смутные сомнения (про многопоточность)
    #39625489
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияGobzo Kobler,

как это ужасно. Говорить на русском "потоки" и показывать код в котором одновременно присутствуют strams & threads.


в точку! нескрепово как-то
правда, еще ужаснее говорить strams и показывать код, в котором присутствуют streams...
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Меня терзают смутные сомнения (про многопоточность)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]