powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / сбалансировать потоки
31 сообщений из 31, показаны все 2 страниц
сбалансировать потоки
    #40101134
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть основная прога, и несколько потоков.
в основной проге куча таймеров, событий, обработок и всяко.
если я запускаю доп потоки, то они, получается, делят общее процессорное время. и тогда основная прога начинает конкретно тормозить.
как их сбалансировать?
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40101149
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понизь приоритет дополнительных.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40101158
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73,
Подробнее.
Правильнее так - "в программеА есть основной поток ГУИ дополнительные потоки (в ней же).
Чтобы не тормозил ГУИ надо его поток (там где ГУИ) не нагружать всякой фигнёй.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40101177
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73, только лишь средствами C++ этого добиться невозможно, но возможно через API операционной системы.
К примеру, в Windows API есть такие функции, как SetThreadIdealProcessor или SetThreadAffinityMask .
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40101265
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
Mizer73, только лишь средствами C++ этого добиться невозможно, но возможно через API операционной системы.
К примеру, в Windows API есть такие функции, как SetThreadIdealProcessor или SetThreadAffinityMask .
угу.
Если в поток событий гуи где отрисовка окон напихать архивирование файлов, то согласен - добится невозможно.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40101338
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
есть основная прога, и несколько потоков.
в основной проге куча таймеров, событий, обработок и всяко.
если я запускаю доп потоки, то они, получается, делят общее процессорное время. и тогда основная прога начинает конкретно тормозить.
как их сбалансировать?

Тебе надо от модели запуска потоков перейти к использованию фиксированного пула потоков.
У тебя есть UI поток который отвечает за графику приложения. Его не надо трогать. И есть
допустим 4-8 рабочик потоков (workers) которые делают там архивацию файлов и прочее.
Если потоки все заняты - то ставишь задачу в очередь. Пускай ждет.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40101476
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

тут такая фигня, что доп поток как раз нагрузил посекундным опросом входных данных с их разбором, отсылкой команд из стека входящих команд, и логика обработки команд.
посему ему некогда быть в очереди, ему надо вертеться независимо от основного процесса, но не отбирать у него проц время, и самому не тормозить.
добавил в этот поток таймеры, что бы не было слишком частых опросов/отправок/обработок, и занизил его приоритет.
пока, удовлетворительно. но это под конкретные компы. хотя, если на этих компах сбалансированно, то и на более шустрых все будет около дела.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40101477
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
Mizer73, только лишь средствами C++ этого добиться невозможно, но возможно через API операционной системы.
К примеру, в Windows API есть такие функции, как SetThreadIdealProcessor или SetThreadAffinityMask .


DWORD SetThreadIdealProcessor(
HANDLE hThread,
DWORD dwIdealProcessor
);

интересная тема...
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40101478
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73
rdb_dev
Mizer73, только лишь средствами C++ этого добиться невозможно, но возможно через API операционной системы.
К примеру, в Windows API есть такие функции, как SetThreadIdealProcessor или SetThreadAffinityMask .


DWORD SetThreadIdealProcessor(
HANDLE hThread,
DWORD dwIdealProcessor
);

интересная тема...


а как основному процессу выделить количество ядер? мгновенный вопрос без раздумий "как"
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40101483
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73
основному процессу

Это что такое?
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40101861
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73, у "основного" процесса есть "основной" поток. Ему и выделяй! В чём проблема?
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102082
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73,
Доп поток (там где нет очереди ГУИ) нагружай чем угодно.
Правило не грузить только для того где ГУИ.
Если не нравится не реагирующие окошки винды.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102091
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpДоп поток (там где нет очереди ГУИ) нагружай чем угодно.

Он нагружает его вызовами Synchronize. Архангельский переворачивается в гробу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102095
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

убрал Synchronize - и все завертелось.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102151
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну конечно. Зачем нужен synchronize... Рудимент да и только...
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102367
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
Dimitry Sibiryakov,

убрал Synchronize - и все завертелось.
Так у тебя, чтоль, Embarcadero С++ Builder?
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102369
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev
Mizer73ал Synchronize - и все завертелось.


да
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102383
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73
Dimitry Sibiryakov,

убрал Synchronize - и все завертелось.

Просто "убрал"?
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102465
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то в голове крутится какое-то изречение что дескыть гениально когда уже нечего убрать...
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102473
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Что-то в голове крутится какое-то изречение что дескыть гениально когда уже нечего убрать...

Все гениальное просто ?

Обычно оно вырождается в "Все гениальное просто ... но неправильно"
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102476
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton
Что-то в голове крутится какое-то изречение что дескыть гениально когда уже нечего убрать...

Все гениальное просто ?

Обычно оно вырождается в "Все гениальное просто ... но неправильно"

Нет. Если так пересказать то теряется суть. Тут как раз речь идет не о явлении простоты.
А о "процессе" внесения упрощений.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102550
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
mayton
Что-то в голове крутится какое-то изречение что дескыть гениально когда уже нечего убрать...

Все гениальное просто ?

Обычно оно вырождается в "Все гениальное просто ... но неправильно"
про неправильно не слышал ни разу.
1) „Я беру камень и отсекаю всё лишнее.“ — Микеланджело Буонарроти
2)"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
3) Не работает? Попробуй ничего не делать!
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102661
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Dima T
пропущено...

Все гениальное просто ?

Обычно оно вырождается в "Все гениальное просто ... но неправильно"
про неправильно не слышал ни разу.
1) „Я беру камень и отсекаю всё лишнее.“ — Микеланджело Буонарроти
2)"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
3) Не работает? Попробуй ничего не делать!

Да. Джордж Санд. Похоже это оно.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102665
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа. Джордж Санд.

Сразу видно писательницу. Технари формулируют проще: Keep It Simple, Stupid.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102678
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
“Perfection is achieved not when there is nothing more to add, but rather when there is nothing more to take away.” – Antoine de Saint-Exupery
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102735
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonДа. Джордж Санд.

Сразу видно писательницу. Технари формулируют проще: Keep It Simple, Stupid.
Эх, верно говорят, что нет пророков в своём отечестве... :)
"Сделать простое иногда во много раз сложнее, чем сложное" /Михаил Калашников/
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102755
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один финский парень в борьбе с простотой рефакторил алгоритм удаления списковых элементов.
Оригинал не могу найти но вот кто-то копи-пастил себе в репу https://github.com/mkirchner/linked-list-good-taste

before
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void remove_cs101(IntList *l, IntListItem *target)
{
    IntListItem *cur = l->head, *prev = NULL;
    while (cur != target) {
        prev = cur;
        cur = cur->next;
    }
    if (prev) {
        prev->next = cur->next;
    } else {
        l->head = cur->next;
    }
}


after
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
static inline IntListItem **find_indirect(IntList *l, IntListItem *target)
{
    IntListItem **p = &l->head;
    while ((*p) && (*p) != target) {
        p = &(*p)->next;
    }
    return p;
}

void remove_elegant(IntList *l, IntListItem *target)
{
    IntListItem **p = find_indirect(l, target);
    *p = target->next;
}



Мне кажется тут главное - оставаться в пределах возможностей человеческого восприятия. Тоесть код
должен быть элегантным но оставаться supportable.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40102765
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,
Калашников хороший пример))
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40107169
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

довольно неочевидный пример для сишника или плюсовика, так как требует внимания
а всё из-за нелюбви к заданиям типов у оных
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40107262
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется дело не в типах.

Код: plaintext
1.
2.
3.
4.
5.
    IntListItem **p = &l->head;
    while ((*p) && (*p) != target) {
        p = &(*p)->next;
    }
    return p;



Не знаю как в сях. Но в С++ подобный код обязательно вызывает во первых споры разработчиков.
Во вторых возможны варнинги статик-анализаторов. PVS, Sonar, e.t.c. Я не тестил но думаю что там будут
просто смысловые и синтаксические предупреждения класса "code-smell", "tricky-code" и возможно
что-то с человеческими метриками. Типа там... неясность. Использование одной переменной в двух ролях.

Я-бы оставил 1-й вариант кода. Я всегда беру две ссылки previous/next для обработки списков.
Это дает возможность смотреть "назад". И может быть в дву-направленных я-бы брал три штуки.

Возможно Торвальдс гордится некими ассемблерными оптимизациями в его варианте - но мне всегда
ближе и ценнее способность прочитать. Восхитится удобством внесения изменений. И просто быть
спокойным что это закоммичен код. А не ребус. А если впадать в крайности... ну писал-бы ассемблерные
вставки. Кто-ж запретит-то. Особенно когда ты - главный коммитер.
...
Рейтинг: 0 / 0
сбалансировать потоки
    #40107300
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

роль тут одна - "место, где хранится указатель", и для понимания этого, желательно обозначить это новым типом, что не сделано
"Задание лишних сущностей плохо, а незадание нужных сущностей - ещё хуже" (С)

например, использование этого способа в красно-чёрном дереве позволяет срезать половину кода, что явно облегчает читаемость
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / сбалансировать потоки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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