Russian Qt Forum
Ноябрь 22, 2024, 19:35
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Правильное использование многопоточности
Страниц:
1
[
2
]
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Правильное использование многопоточности (Прочитано 25104 раз)
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Правильное использование многопоточности
«
Ответ #15 :
Январь 28, 2016, 09:25 »
А вот интересен вопрос реализации и прироста скорости.
У меня имеется подобная задачка, отложенная на потом.
Как эффективнее использовать потоки?
Я полагаю, что должен быть 1 поток, который будет читать данные в QStringList, тем самым формируя очередь для парсинга. В это время другие потоки начинают парсить полученные данные в QList результатов. Причём потоков для парсинга должно соответствовать QThread::idealThreadCount().
Как считаете? Жизнеспособно? Прирост скорости получится значительный?
Записан
Bepec
Гость
Re: Правильное использование многопоточности
«
Ответ #16 :
Январь 28, 2016, 09:32 »
Тут надо смотреть именно на объем работ. Если простой парсинг, прирост будет незначительный. Если парсинг с созданием структур, выделением памяти и преобразованиями - прирост возможно будет, а мб будет замедление из-за малой нагрузки на поток.
PS как говаривал сенсей, нужно разбирать каждый конкретный случай. Одно условие может поменять всё
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Правильное использование многопоточности
«
Ответ #17 :
Январь 28, 2016, 09:44 »
1) Выясните сколько % времени уходит чисто на чтение, просто отключите теперешний парсинг. Учтите что эффект будет/возможен только для разницы между "полным" временем и "только чтение"
2) Выясните насколько в данном случае притормаживает удобный но жирный QString. Для чтения попробуйте читать файл как двоичный (raw data), для парсинга - смотрите сами
Потом о чем-то уже можно будет говорить
Записан
egorsmkv
Гость
Re: Правильное использование многопоточности
«
Ответ #18 :
Январь 28, 2016, 12:59 »
Цитата: gil9red от Январь 28, 2016, 07:34
Цитата: egorsmkv от Январь 28, 2016, 02:22
Исправил
Освойте
https://github.com/
/
https://bitbucket.org/
-- проще же будет проекты хранить, иметь к ним доступ, тут и знания о контролях версий появятся, а они в it-компаниях всегда используются, да и не нужно будет перезаливать
Не раз было, что в некоторых статья на хабре можно было встретить, выложенный автором проект на файлообменник, ссылка которого, конечно, давно дохлая
Я его использую, но не хочу пока туда такой сырой код выкладывать
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Правильное использование многопоточности
«
Ответ #19 :
Январь 28, 2016, 15:46 »
egorsmkv, заведите отдельную ветку для сырого кода. А потом сольёте со стабильной.
Записан
egorsmkv
Гость
Re: Правильное использование многопоточности
«
Ответ #20 :
Январь 28, 2016, 20:17 »
Сделал -
https://github.com/egorsmkv/qt-multithreading
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Правильное использование многопоточности
«
Ответ #21 :
Январь 28, 2016, 20:41 »
Цитата: egorsmkv от Январь 28, 2016, 20:17
Сделал -
https://github.com/egorsmkv/qt-multithreading
Интересно будет посмотреть
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
egorsmkv
Гость
Re: Правильное использование многопоточности
«
Ответ #22 :
Январь 28, 2016, 21:03 »
Цитата: gil9red от Январь 28, 2016, 20:41
Цитата: egorsmkv от Январь 28, 2016, 20:17
Сделал -
https://github.com/egorsmkv/qt-multithreading
Интересно будет посмотреть
Там всё довольно тривиально реализовано. Покритикуйте хотя-бы то, что есть.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Правильное использование многопоточности
«
Ответ #23 :
Январь 29, 2016, 10:37 »
Цитата: egorsmkv от Январь 28, 2016, 21:03
Там всё довольно тривиально реализовано. Покритикуйте хотя-бы то, что есть.
Здесь нужно захватить мутекс
Код
C++ (Qt)
void
Worker
::
resumeThreads
(
)
{
// QMutexLocker lock(&sync);
pause
=
0
;
cond.
wakeAll
(
)
;
}
Вообще QWaitCondition здесь не очень лепится, обычно он связывается с выемкой задач из очереди, но тут это уже делает Qt
Записан
egorsmkv
Гость
Re: Правильное использование многопоточности
«
Ответ #24 :
Январь 29, 2016, 16:55 »
Цитата: Igors от Январь 29, 2016, 10:37
Цитата: egorsmkv от Январь 28, 2016, 21:03
Там всё довольно тривиально реализовано. Покритикуйте хотя-бы то, что есть.
Здесь нужно захватить мутекс
Код
C++ (Qt)
void
Worker
::
resumeThreads
(
)
{
// QMutexLocker lock(&sync);
pause
=
0
;
cond.
wakeAll
(
)
;
}
Вообще QWaitCondition здесь не очень лепится, обычно он связывается с выемкой задач из очереди, но тут это уже делает Qt
Мьютекс для pause?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Правильное использование многопоточности
«
Ответ #25 :
Январь 29, 2016, 17:03 »
Цитата: egorsmkv от Январь 29, 2016, 16:55
Мьютекс для pause?
В первую очередь для условной переменной.
Записан
egorsmkv
Гость
Re: Правильное использование многопоточности
«
Ответ #26 :
Январь 29, 2016, 17:12 »
Цитата: Old от Январь 29, 2016, 17:03
Цитата: egorsmkv от Январь 29, 2016, 16:55
Мьютекс для pause?
В первую очередь для условной переменной.
Это не простая переменная, а QAtomicInt
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Правильное использование многопоточности
«
Ответ #27 :
Январь 29, 2016, 17:13 »
Цитата: egorsmkv от Январь 29, 2016, 17:12
Это не простая переменная, а QAtomicInt
Условная переменная это cond.
Записан
egorsmkv
Гость
Re: Правильное использование многопоточности
«
Ответ #28 :
Январь 29, 2016, 17:50 »
Понял.
Вместо QWaitCondition что лучше использовать?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Правильное использование многопоточности
«
Ответ #29 :
Январь 29, 2016, 17:54 »
Цитата: egorsmkv от Январь 29, 2016, 17:50
Вместо QWaitCondition что лучше использовать?
Это зависит от того, что хотим получить.
Если вам нужна эта пауза, то условная переменная для этого подходит.
«
Последнее редактирование: Январь 29, 2016, 17:56 от Old
»
Записан
Страниц:
1
[
2
]
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...