Как определить мультипоточное приложение или нет ?

Тема в разделе "WASM.WIN32", создана пользователем Skillax, 9 авг 2011.

  1. Skillax

    Skillax New Member

    Публикаций:
    0
    Регистрация:
    17 май 2011
    Сообщения:
    33
    Подскажите способы определения мультипотчного приложения win32.
     
  2. rmka

    rmka Member

    Публикаций:
    0
    Регистрация:
    22 окт 2010
    Сообщения:
    108
    Наличие CreateThread в импорте. Если ипользеутся дотнет или еще что-нибудь такое, то не знаю.
     
  3. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    rmka
    Ой как не факт ...

    Skillax
    Посчитать количество потоков, если больше одно то это многопоточное:)
     
  4. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    П.С. Хотя может быть много поточным , вот только потом может жить не все время ...

    Тогда Загрузить в дебаггер и посмотреть не создает ли потоков ... Вообщем уточните задачу
     
  5. rmka

    rmka Member

    Публикаций:
    0
    Регистрация:
    22 окт 2010
    Сообщения:
    108
    shchetinin
    В общем случае конечно не поможет, но если мы говорим о легальном софте, то этого должно быть достаточно.
     
  6. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    rmka
    А если DLL будет загружена? это ведь вполне легально ... на пример консольная тулза , подгружает DLL ... Или вы хотите все ссылки пройти по либам?
     
  7. rmka

    rmka Member

    Публикаций:
    0
    Регистрация:
    22 окт 2010
    Сообщения:
    108
    shchetinin
    А в dll треды создаются каким-то особенным образом? Точно так же в импорте посмотреть.
     
  8. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    rmka
    Да, но надо сначало будет посмотреть какие либы вызывает exe, а потом еще пройтись по этим либам ... Да еще и не факт что то найдется (( Перспективка не очень ...
     
  9. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Нафиг это надо? Щас 99% многопоточные. У меня почему то предчувствие что автор хочет юзать какой-то метод который криво работает на многопоточных)) Лучше сделай нормальную синхронизацию, чем выдумывать кучу бажного кода по проверке на создание потоков, который будет подтверждать что 99% таки многопоточные.
     
  10. Skillax

    Skillax New Member

    Публикаций:
    0
    Регистрация:
    17 май 2011
    Сообщения:
    33
    onSide
    Я ничего не собирался писать, мне это нужно для оптимизации работы системы и приложений которые запущены на многоядерном сервере. Есть наверно проги для просмотра кол-ва открытых потоков запущенных процессов ?
     
  11. rmka

    rmka Member

    Публикаций:
    0
    Регистрация:
    22 окт 2010
    Сообщения:
    108
    Skillax
    Что значит "для просмотра"? Если просто посчитать количество, то это и диспчер задач умеет.
     
  12. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    CreateToolhelp32Snapshot + Thread32First\Next

    PS: Хотя порядок перебора потоков ф-ей Thread32Next и не документирован в мсдн, но практика и здравый смысл показывают, что они группируются по th32OwnerProcessID (видимо дергаются из KPROCESS.ThreadListHead), что упрощает подсчет числа потоков каждого процесса
     
  13. Skillax

    Skillax New Member

    Публикаций:
    0
    Регистрация:
    17 май 2011
    Сообщения:
    33
    Я так понял в любом приложений есть потоки, но меня интересует задействует или нет приложение несколько процессорных ядер.
     
  14. Honorary_BoT

    Honorary_BoT New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    87
  15. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Skillax
    Сейчас во всех приложениях больше одного потока .. Что вы хотите добится этим? или это просто инфа?
     
  16. Skillax

    Skillax New Member

    Публикаций:
    0
    Регистрация:
    17 май 2011
    Сообщения:
    33
    Honorary_BoT
    А может быть приложение быть многоядерным без api выставляющей маску ядер? т.к. винда для любого win32 или win64 приложения выставляет все биты маски в 1.
     
  17. Honorary_BoT

    Honorary_BoT New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    87
    Не, тут не так. Потоки распределяются по ядрам операционной системой. Поэтому, наоборот, если есть маска аффинитета, т.е. сродства с ядром, то множество потоков могут быть закреплены за одним ядром. Иначе они будут исполняться на разных.
     
  18. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Skillax
    вы думаете что сможете сделать планировщик лучше чем виндовский?
     
  19. Skillax

    Skillax New Member

    Публикаций:
    0
    Регистрация:
    17 май 2011
    Сообщения:
    33
    Honorary_BoT
    Когда купили сервер заметного увеличения произваодительности работы 1c 7.7 не заметили, в 1С сказали что 7.7 не многопоточное и т.е. не расчитано на работу с несколькими процессорами, и нам нужно проапргейдить 7.7 на 8.0.
    Как опрделить приложения которые нужно запускать с указанием ядра и для каких это не нужно ?
    т.к. я читал что не многопроцовые приложения замедляют работу многопроцессорного компьютера.
     
  20. Honorary_BoT

    Honorary_BoT New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    87
    Ну смотрите. Есть физические ресурсы железа. ОС управляет ими, превращая эти физические ресурсы в логические (виртуальные, не знаю, как грамотнее).
    Пусть у вас два двухъядерника с гипертрэдингом. Т.е. гипертрединг по сути не дает отдельного физического ядра, но тем не менее он считается за ядро логическое - можно увидеть в таскманагере. То же самое и про остальные части, т.е. два физических проца - 2 логических, 2 физ ядра - х2 логических, гипертрединга - х2 логических, итого 2х2х2 = 8 логических ядер, на которых происходит выполнение кода.
    Минимальная единица планирования в ОС Windows - поток. Распределением ядер как ресурса для выполнения потоков кода занимается ОС, автоматически. Можно вручную привязать потоки к ядрам, но программисты вряд ли этим будут заниматься, ещё и при учете того, что это отрицательно скажется на производительности.
    Другое дело, что в программе могут быть места, которые либо поддаются распараллеливанию (-> увеличение быстродействия), либо грамотно были реорганизованы места, где потоки "отдыхали" вследствие синхронизации.
    Вам просто ответили попроще, не вдаваясь в детали реализации приложения...