Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Меня терзают смутные сомнения (про многопоточность) / 13 сообщений из 13, страница 1 из 1
03.04.2018, 19:49
    #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
03.04.2018, 20:00
    #39625215
a guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Меня терзают смутные сомнения (про многопоточность)
Gobzo Kobler, создавать/уничтожать строки в цикле — как-то жирно.
...
Рейтинг: 0 / 0
03.04.2018, 20:06
    #39625218
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Меня терзают смутные сомнения (про многопоточность)
a guest,

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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