Заменить медленные функции Winapi своими

Тема в разделе "WASM.A&O", создана пользователем Llirik, 11 сен 2023.

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Я тут радикально переделал свой код и теперь он, кажется, стал очень быстрым, но теперь его по-моему сильно тормозят функции WinApi. Как написать свой мьютекс и как обойтись без LocalFree я придумал, а вот как написать свои LocalAlloc и CreateThread пока нет. Может что-то подскажете?
     
  2. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    что значит кажется?
    где ваш тайминг исполенния ДО и ПОСЛЕ?
    а чтоб не казалось пить меньше надо
     
  3. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    457
    Если хочется скорости на многопоточке, то главное понять, что CreateThread нельзя дёргать из принципа "нужен поток - создаём его". Нужно сразу создать столько потоков сколько имеет смысл создавать и общаться с ними передавая им задачи по мере поступления, а когда потоки становятся не нужны - ставить их в режим ожидания критической секции. Критические секции, кстати, быстрее мьютексов, т.к. работают только в рамках одного процесса и потому легковеснее и не сразу в режим ядра проваливаются.
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    "Зеленые потоки", если тебе кажется, что у тебя слишком много потоков, что переключение контекстов занимает слишком много времени, но скорее всего ты заблуждаешься.

    "Арена-аллокатор" будет быстрее чем системный аллокатор, но опять же скорее всего ты либо соник зе хетчхог, либо хочешь им казаться.
    --- Сообщение объединено, 11 сен 2023 ---
    artworks-000199090841-uq2lcs-t500x500.jpg
     
    Win32Api нравится это.
  5. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    155
    А смысл? Не используй винду тогда
     
  6. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    Мне тут инопланетяни радикально переделали мой генный код и теперь он, кажется, стал очень медленным, но теперь его по-моему сильно разгоняют слоупоки. Как написать свой шеллкодес и как заинжектить его в шелл рептелоедов я придумал, а вот как сконпелировать немного сплоета - пока нет. Не подсказывайте мне ничего - я всё равно ничо не пойму, а если и пойму, то всё равно уже будет слишком поздно.
     
    MaKsIm нравится это.
  7. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Можно IOCP потоки сделать которые сами будут ждать на вызове GetQueuedCompletionStatus. Передавать задачи через PostQueuedCompletionStatus. Плюсы этого подхода еще в том что много стандартных асинхронных операций в винде можно так обрабатывать.
     
  8. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Раньше тайминг был плавным и время обработки соответствовало количеству обрабатываемых данных, но после того, как я сделал создание потоков и выделение 2ГБ рекурсивным, тайминг стал каким-то рваным и время обработки даже увеличилось, а вновь созданный поток завершает обработку данных позже, чем позже, чем поток создавший его, хотя у нового потока в сотни раз меньше данных для обработки. И если бы создаваемый поток быстро обрабатывал и передавал обработанные данные первому, то первый мог бы досрочно вычислить результат и не делать миллионы лишних операций.

    P.S. Не известно сколько рекурсий может быть. Зависит от вводных данных.
     
  9. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    457
    Говорю же - потоки нельзя создавать "по потребности" если важна производительность. Создание потока - очень очень очень тяжёлая операция. Нужно создавать пул из потоков которые спят и ждут приказа на выполнение задачи и после выполнения снова засыпают. Будить их - намного намного намного дешевле, чем убивать/создавать. Особенно если задача высокоинтенсивная, то не нужно больше потоков, чем число ядер на машине, они всё плотно займут и будут молотить на 99% возможного, большего и не добиться. Больше потоков, чем число ядер, имеет смысл только если по задаче значимая их часть проводит время в ожидании выполнения чего то другого - например ввода-вывода, тогда есть смысл в пуле большем, чем число ядер - в оптимуме опять таки чтобы число активно работающих сравнялось с числом ядер.
     
    Win32Api и Rel нравится это.
  10. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    aa_dav, я это понимаю, но как сделать ещё по-другому пока ума не приложу........ было по-другому (два потока), но из-за обработки первым потоком большого числа доп. информации параллельное выполнение приводило к западению скорости в 5 раз, чем последовательное. Поэтому я решил избавиться от этих вспомогательных вычислений. Но часто бывает так, что данные нужно обнулить, но результат обработки этих данных ещё не получен, а этот результат требуется в другом месте вычислений
     
  11. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    457
    Llirik, без конкретики и рекомендации будут только самые общие.
    Иной код плохо параллелится.
     
  12. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    @Lirik - пишите свою ОС, раз венда медленная
     
  13. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Боюсь, что конкурент воспользуется моей идеей, а мне необходимо победить его, но у него команда, а я один
     
    Последнее редактирование: 12 сен 2023
  14. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    Делаешь - не бойся, боишься - не делай. Иначе покажется, что Вы уже проиграли, да ещё и вынуждаете весь форум проигрывать с каждого второго сообщения:crazy:
     
    R81... и Llirik нравится это.
  15. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Да я и не боюсь) Просто я пошёл по своему неизведанному до селе пути и после полутра годов работы без выходных у меня уже извилин не хватает решить данную задачу (если, конечно, вообще её можно данным способом решить):)
     
  16. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Простите, вынужден спросить... а этот конкурент... он сейчас здесь? с нами на этом форуме? (с)
     
  17. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Нет. Но если его кто-то обойдёт, он будет везде рыскать, чтобы понять как его обошли
     
    Последнее редактирование: 12 сен 2023
  18. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    110
    [​IMG]

    Вам бы к психиатру сходить, чтобы вашу идею не своровали, они в этом случае как раз помогают.
     
    Последнее редактирование: 12 сен 2023
    TrashGen нравится это.
  19. R81...

    R81... Active Member

    Публикаций:
    0
    Регистрация:
    1 фев 2020
    Сообщения:
    149
    Llirik, т.е. ваш бинарник не уйдет в паблик?
    Иначе команда конкурента может проанализировать его.
     
  20. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    Application, как рыскать везде, чтобы врачи-убийцы не понели, что их обошли и надели белый халат первыми?
    --- Сообщение объединено, 13 сен 2023 ---
    R81..., возможно, команда конкурента и общается с нами, пока ОП спит или полтора года конпелирует преват. Заказчик же может просто не дожить до исполнителя.
     
    M0rg0t и Application нравится это.