Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443

Загруженность процессора?

02.04.2020, 16:05. Показов 9616. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уже нашёл ответ на Си. Помогите, пожалуйста, с "переводом" на Visual Basic.

Ну а в идеале можно и сразу на PowerBasic

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "TCHAR.h"
#include "pdh.h"
 
static PDH_HQUERY cpuQuery;
static PDH_HCOUNTER cpuTotal;
 
void init(){
    PdhOpenQuery(NULL, NULL, &cpuQuery);
    // You can also use L"\\Processor(*)\\% Processor Time" and get individual CPU values with PdhGetFormattedCounterArray()
    PdhAddEnglishCounter(cpuQuery, L"\\Processor(_Total)\\% Processor Time", NULL, &cpuTotal);
    PdhCollectQueryData(cpuQuery);
}
 
double getCurrentValue(){
    PDH_FMT_COUNTERVALUE counterVal;
 
    PdhCollectQueryData(cpuQuery);
    PdhGetFormattedCounterValue(cpuTotal, PDH_FMT_DOUBLE, NULL, &counterVal);
    return counterVal.doubleValue;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2020, 16:05
Ответы с готовыми решениями:

Как узнать загруженность процессора по процессам в процентах?
Подскажите пожалуйста скрип который получал бы список процессов и загрузку проца по ним.

Как получить загруженность ЦП в процентах
Доброго времени суток. Пишу программу-индикатор для курсача, который определял бы загруженность памяти и процессора. Принцип работу как у...

Загруженность процессора
Доброго вечера всем! Есть ли в php что нибудь для определения текущей загрузки процессора процессами (операционка Linux 2.6)?

47
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
08.04.2020, 19:18  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Power_Basic Посмотреть сообщение
Спасибо, попробую покопать в этом направлении. О результатах потом отпишусь.
Как и обещал, отписываюсь
Вот VB-программа, исправно работающая у меня на Windows_10_Pro_64:

Visual Basic
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
Option Explicit
 
Private Declare Function PdhOpenQuery Lib "Pdh.Dll" Alias "PdhVbOpenQuery" _
          (ByRef QueryHandle As Long) As Long
Private Declare Function PdhAddCounter Lib "Pdh.Dll" Alias "PdhVbAddCounter" (ByVal QueryHandle As Long, _
            ByVal CounterPath As String, ByRef CounterHandle As Long) As Long
Private Declare Function PdhCollectQueryData Lib "Pdh.Dll" (ByVal QueryHandle As Long) As Long
Private Declare Function PdhGetDoubleCounterValue Lib "Pdh.Dll" Alias "PdhVbGetDoubleCounterValue" _
          (ByVal CounterHandle As Long, ByRef CounterStatus As Long) As Double
 
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  
Dim QueryHandle As Long
Dim CounterHandle As Long
Dim Result As Long
 
Private Sub Form_Load()
    Me.Show
    Text1.Text = ""
    Text1.FontSize = 18
    Timer1.Interval = 2000
    Result = PdhOpenQuery(QueryHandle)
    Result = PdhAddCounter(QueryHandle, "\Процессор(_Total)\% загруженности процессора", CounterHandle)
    Timer1_Timer
End Sub
 
Private Sub Timer1_Timer()
    Dim Status As Long
    
    Result = PdhCollectQueryData(QueryHandle)
    Text1.Text = Format(PdhGetDoubleCounterValue(CounterHandle, Status), "##0.00") & "%"
End Sub
За точность измерений не поручусь, но вроде бы что-то показывает
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
08.04.2020, 19:47
Цитата Сообщение от Power_Basic Посмотреть сообщение
исправно работающая у меня
К сожалению именно у вас.
Вот эта строка ну очень не вызывает доверия:
Цитата Сообщение от Power_Basic Посмотреть сообщение
Result = PdhAddCounter(QueryHandle, "\Процессор(_Total)\% загруженности процессора", CounterHandle)
На разных национальных интерпретациях это точно не сработает. Если уж по взрослому разбираться, то надо было однозначно этот параметр вычислить программным путём, а именно с PdhLookupPerfNameByIndexW из pdh.dll
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
08.04.2020, 20:04  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
К сожалению именно у вас.
Вот эта строка ну очень не вызывает доверия:
А вы у себя попробуйте запустить, наверняка ведь сработает

Цитата Сообщение от Pro_grammer Посмотреть сообщение
На разных национальных интерпретациях это точно не сработает.
Ну да, это и был самый главный камень преткновения, который я подробно описал выше в этой ветке:

Цитата Сообщение от Power_Basic Посмотреть сообщение
2. Проблемы использования на локализованных компьютерах.
Проблема в том, что счётчики обзываются (и изменить это никак нельзя!) локализованными именами, ну то есть так вот прямо по-нашему, по-русски
А чтобы получить значение счётчика, его имя (в документации это называется "путь к счётчику") нужно указывать именно по-русски. А где узнать, как получить?
Для этого майкрософтовцы предлагают аж 5 способов
Но все они такие извилистые, что заблудиться раз плюнуть
Ковырял-ковырял, наковырял, что для производительности процессора путь к счётчику следует называть вот так:
"\Процессор(_Total)\% загруженности процессора". Но и то до конца не уверен, что это правильно.
А самое печальное состоит в том, что даже если программист передаст функции PdhAddCounter неправильное имя, эта функция всё равно вернёт ему значение ERROR_SUCCESS по той причине, что функция предполагает, что если введено незнакомое имя, то значит программист собирается создать новый счётчик
Цитата Сообщение от Pro_grammer Посмотреть сообщение
На разных национальных интерпретациях это точно не сработает. Если уж по взрослому разбираться, то надо было однозначно этот параметр вычислить программным путём, а именно с PdhLookupPerfNameByIndexW из pdh.dll
Ну это вам-профессионалам надо "по взрослому разбираться", а мне - "продвинутой домохозяйке" сгодится и по детски
Я же пишу исключительно для самого себя, так что с локализацией всегда всё в ажуре
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
08.04.2020, 21:25
Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну это вам-профессионалам надо "по взрослому разбираться", а мне - "продвинутой домохозяйке" сгодится и по детски
Да научу, чего уж там
Visual Basic
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
Private Declare Sub PdhLookupPerfNameByIndex Lib "PDH.DLL" _
    Alias "PdhLookupPerfNameByIndexA" (ByVal szMachineName As String, _
    ByVal dwNameIndex As Long, _
    ByVal szNameBuffer As String, _
    ByRef pcchNameBufferSize As Long)
Const MAX_PATH As Integer = 260
Const COUNTERPERF_PROCESSOR = 238
Const COUNTERPERF_PERCENTPROCESSORTIME = 6
Private Sub Command1_Click()
 
Dim Instance As String ' as Integer тогда можно
Instance = "_Total"    ' по ядрам 0,1,2,3 и т.д
 
Dim NameLen As Long
    Dim ObjectName As String, CounterName As String
    
    NameLen = MAX_PATH
    ObjectName = Space$(NameLen)
    PdhLookupPerfNameByIndex ByVal vbNullString, COUNTERPERF_PROCESSOR, ObjectName, NameLen
    ObjectName = Left$(ObjectName, NameLen - 1)
        
    NameLen = MAX_PATH
    CounterName = Space$(NameLen)
    PdhLookupPerfNameByIndex ByVal vbNullString, COUNTERPERF_PERCENTPROCESSORTIME, CounterName, NameLen
    Print "\" & ObjectName & "(" & Instance & ")\" & Left$(CounterName, NameLen - 1)
 
End Sub

Если делать загрузку на каждое ядро, то надо вычислить кол-во ядер процессора(через GetSystemInfo) и вместо Instance = "_Total" вставлять номера ядер начиная с 0 в цикле.
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
08.04.2020, 22:43  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Да научу, чего уж там
Спасибо, отлично работает!
Вот что значит профессионал!

А я это имя добывал дня 3, никак не меньше
В конечном итоге получил его почти в буквальном смысле, "на коленке", "в ручном режиме управления" с помощью функции PdhExpandWildCardPathA (получение_путей_счётчиков_по маске). Сначала использовал маску в имени самого счётчика, потом в пути к нему. В результате получил список из множества вариантов, ну и потом уже (тоже в ручном режиме) выбрал правильный. Но это я описываю уже самый конечный этап маршрута, а до этого попетлять пришлось будь здоров

Перепробовал массу вариантов и ни один не срабатывал. А я же в WinAPI-то не особо силён, поэтому было не понятно, толи я имя с путём неправильные использую, толи аргументы функциям неправильно передаю. Одним словом, задачка почти со всеми неизвестными
Знать бы правильное имя вместе с путём с самого начала, было бы гораздо проще, но я-то не знал. А это был ключ к решению всего кроссворда. В какие-то моменты я даже чувствовал себя злым магом из "Волшебной лампы Алладина", который тоже там в самом начале его имя раузнать пытался

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Если делать загрузку на каждое ядро, то надо вычислить кол-во ядер процессора(через GetSystemInfo) и вместо Instance = "_Total" вставлять номера ядер начиная с 0 в цикле.
Спасибо, понял, буду иметь в виду.

Там ещё дополнительные подводные камни имеются, связанные, как я вычитал, с использованием современных многопроцессорных компьютеров. Вот что они по этому поводу пишут:
Understanding Multiple Processor Counters

Some performance counters were designed for single processor systems and might not be accurate for multiprocessor computers. For example, a process is limited to 100 percent of a single processor; however, its threads can use several processors, totaling more than 100 percent.

The "\Processor(_Total)\% Processor Time" counter value is the average usage of all processors. For example, if you have two processors, one at 100 percent and another at 0 percent, this counter will report 50 percent. So the range is from 0 through 100.

The "\Process(X)\% Process Time" counter value is the sum of the processor usage by all threads of process X. For example, in a computer with two processors, if a process has two threads, one taking up 75 percent of a CPU and the other taking 80 percent of another CPU, this counter will report 155 percent. The range for this counter is from 0 through 100 * ProcessorCount.
Или это к многоядерным процессорам (как у меня, да и у подавляющего большинства сейчас) не относится, а только именно к компьютерам с несколькими физическими процессорами (что наверно только в каких-нибудь серверах мощных используется)?
0
11.04.2020, 18:32

Не по теме:

Цитата Сообщение от Power_Basic Посмотреть сообщение
А я это имя добывал дня 3, никак не меньше
Нужно внимательно смотреть коды что тут выкладывают. Загруженность процессора?

0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
11.04.2020, 18:43  [ТС]
Pro_grammer и locm, в данной ветке было упоминание трёх различных подходов к получению информации о текущей загруженности процессора и, к сожалению, у каждого из них имеется очень большой недостаток - нельзя получать данные с большой частотой.
При установке таймера на 500 миллисекунд и ниже показания временами сбрасываются в ноль

У меня сейчас аудиокнига создаётся вот так:
Весь текст делится на 12 частей, потом каждую часть обрабатывает отдельный поток. И ещё один поток (с повышенным приоритетом) является как бы "кучером этих лошадей". Его задача придерживать их, когда слишком уж разгоняются и отпускать, когда уже слегка "утихомирились". Но точного удержания в каком-то узком интервале показаний загрузки процессора не получается, потому что 500 миллисекунд - это целая вечность
На практике получается, что придерживаем, когда выше 50%, а отпускаем, когда уже близко к нулю.

Может быть такой подход вообще не верен с профессиональной точки зрения?
У меня 6 физических ядер процессора. Есть ли вообще смысл создавать так много потоков?

Добавлено через 2 минуты
Цитата Сообщение от locm Посмотреть сообщение
Нужно внимательно смотреть коды что тут выкладывают. Загруженность процессора?
Ну дык там ведь на непонятном мне языке написано
0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,044
Записей в блоге: 7
11.04.2020, 18:52
Цитата Сообщение от Power_Basic Посмотреть сообщение
И ещё один поток (с повышенным приоритетом) является как бы "кучером этих лошадей". Его задача придерживать их, когда слишком уж разгоняются и отпускать, когда уже слегка "утихомирились".
И как по загрузке процесса определить какой поток нужно приостановить чтобы его остальные догнали?
Или это не для синхронной работы? Тогда вообще не понятно зачем ограничивать работу потоков?
В любом случае, нужно контролировать сколько данных было обработано потоком, а не отслеживать загрузку процессора.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну дык там ведь на непонятном мне языке написано
Не настолько существенны отличия. Ведь код на бейсике.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
11.04.2020, 19:17  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
И как по загрузке процесса определить какой поток нужно приостановить чтобы его остальные догнали?
Придерживаю все вместе и отпускаю тоже все вместе
Тупо в цикле прохожусь по всем, сначала SUSPEND, потом RESUME.

Цитата Сообщение от locm Посмотреть сообщение
Или это не для синхронной работы? Тогда вообще не понятно зачем ограничивать работу потоков?
Все потоки работают одновременно. Ограничиваю их работу, чтобы снизить нагрузку на процессор. Ну как-то стрёмно держать процессор нагруженным под сотню в течение долгого времени. Ну или хотя бы даже просто в учебных целях хочется сейчас научиться держать нагрузку на процессор в определённом интервале.

Цитата Сообщение от locm Посмотреть сообщение
В любом случае, нужно контролировать сколько данных было обработано потоком, а не отслеживать загрузку процессора.
В смысле, через определённые промежутки кода вставлять в цикл DOEVENTS? Пробовал, но так получается либо слишком быстро, либо слишком медленно
Или вы сейчас подразумеваете, что можно использовать какой-то другой счётчик вместо счётчика загруженности процессора? Тогда подскажите, пожалуйста, какой именно.

На самом деле, если вообще никак не придерживать, то аудиокнига таки создаётся, и причём очень быстро. Но не каждый раз
Бывает и так, что программа зависает

Цитата Сообщение от locm Посмотреть сообщение
Не настолько существенны отличия. Ведь код на бейсике.
Честно сказать, я чужие программы, написанные даже на VB или на PowerBasic'е, воспринимаю с очень большим трудом
0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,044
Записей в блоге: 7
11.04.2020, 19:32
Цитата Сообщение от Power_Basic Посмотреть сообщение
Придерживаю все вместе и отпускаю тоже все вместе
Что это даст? Те что вырвались в перед, так и будут впереди.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Ограничиваю их работу, чтобы снизить нагрузку на процессор. Ну как-то стрёмно держать процессор нагруженным под сотню в течение долгого времени.
Это стандартный режим работы. Разве озвучка книзи требует столько процессорного времени?

Цитата Сообщение от Power_Basic Посмотреть сообщение
В смысле, через определённые промежутки кода вставлять в цикл DOEVENTS?
Причем здесь это?
При озвучке получаете данные? Вот считайте сколько было получено. Если это необходимо конечно.

Цитата Сообщение от Power_Basic Посмотреть сообщение
На самом деле, если вообще никак не придерживать, то аудиокнига таки создаётся, и причём очень быстро.
Нужно чтобы создавалась медленно? Иначе зачем ограничивать загрузку процессора?

Цитата Сообщение от Power_Basic Посмотреть сообщение
Бывает и так, что программа зависает
Остановите работу программы отладчиком и посмотрите где зависло.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
11.04.2020, 20:23  [ТС]
Цитата Сообщение от Power_Basic
Придерживаю все вместе и отпускаю тоже все вместе
Цитата Сообщение от locm Посмотреть сообщение
Что это даст? Те что вырвались в перед, так и будут впереди.
Моя задача сейчас не в том, чтобы потоки не вырывались вперёд как на скачках (пусть вырываются), а в том, чтобы процессор грузился не слишком уж сильно.

Цитата Сообщение от locm Посмотреть сообщение
Это стандартный режим работы. Разве озвучка книги требует столько процессорного времени?
Не, ну книжки-то разные бывают. Пока слишком уж объёмные подсовывать опасаюсь.

Цитата Сообщение от locm Посмотреть сообщение
При озвучке получаете данные? Вот считайте сколько было получено. Если это необходимо конечно.
Вот это самый интересный момент. Изначально предполагалось, что всё будет происходить в ОЗУ, но потом меня здесь на форуме убедили, что большого выигрыша в скорости (относительно немедленной загрузки на диск) это якобы не даст, да и ресурс диска тоже якобы не пострадает. В результате, теперь всё записывается сразу в файлы на диске. У каждого потока свой файл. Или вы сейчас намекаете, что надо периодически отслеживать объём записанных файлов? Ну а дальше-то как? Придерживать потоки-лидеры, чтобы размеры файлов увеличивались более или менее синхронно, правильно я вас понял?

Цитата Сообщение от Power_Basic
На самом деле, если вообще никак не придерживать, то аудиокнига таки создаётся, и причём очень быстро.
Цитата Сообщение от locm Посмотреть сообщение
Нужно чтобы создавалась медленно? Иначе зачем ограничивать загрузку процессора?
Нужно чтобы программа никогда не вываливалась в аут.

Цитата Сообщение от locm Посмотреть сообщение
Остановите работу программы отладчиком и посмотрите где зависло.
И так тоже пытаюсь действовать. Но, на самом деле, мне понятно, где "собака зарыта".

PureBasic
1
2
    hr = obj_IspVoice.Speak(BYVAL STRPTR(wstr_Temp), %SPF_DEFAULT, dwrd_ulStreamNumber)
    'obj_IspVoice.WaitUntilDone(&HFFFFFFFF)    'Имеет смысл только при асинхронном флаге?
По идее, флаг SPF_DEFAULT должен останавливать работу вызывающего кода до окончания работы вызываемого. Но у меня такое впечатление, что этого не происходит, и в результате там накапливается огромная очередь таких вот вызовов.
Ну вот потому-то и возникла идея временами придерживать "лошадей", чтобы дать возможность уменьшиться этой очереди.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
12.04.2020, 01:31  [ТС]
locm, вот так у меня сейчас выглядит график загрузки процессора (в процентах) при создании аудиокниги.
Ограничение сверху - 60%, снизу - 30%.
Как считаете, это нормально?
Или вообще не стоит пытаться управлять этим процессом, как думаете?
Миниатюры
Загруженность процессора?  
0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,044
Записей в блоге: 7
12.04.2020, 13:32
Я бы вообще не ограничивал бы работу потоков. Не вижу смысла. Если железо компа не выдерживает 100% загрузку процессора, эту проблему нужно решить, иначе не будет стабильной работы компа.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
12.04.2020, 14:10
Power_Basic, это не нужно вообще. Если хочется можно просто понизить приоритет потоков.
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
12.04.2020, 17:22  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Я бы вообще не ограничивал бы работу потоков. Не вижу смысла.
Ну здесь ещё сказывается моё навязчивое желание "поберечь железо", не подвергая его избыточным (на мой взгляд) нагрузкам. Отсюда и намерение перенести большую часть работы с SSD диска в ОЗУ, а теперь вот намерение ограничить предельную нагрузку на процессор.

Цитата Сообщение от locm Посмотреть сообщение
Если железо компа не выдерживает 100% загрузку процессора, эту проблему нужно решить, иначе не будет стабильной работы компа.
На самом деле, комп сейчас работает очень стабильно, тьфу, тьфу, тьфу.
Уже почти забыл, как выглядят синие и чёрные экраны смерти
Но вот испытание некоторыми моими собственными программами винда время от времени не выдерживает
И тогда мне либо предлагают закрыть программу с отправкой письма, либо программа просто закрывается сама "без объявления войны", не оставляя после себя никаких следов. А поскольку я сейчас почти всегда запускаю свои программы из-под редактора методом "Compile and Run", то и закрывается она вместе с редактором (что редко), или просто вылетает в аут безо всяких сообщений, но сам редактор при этом не закрывается (что происходит довольно часто).
Но если нет стабильной работы из-под редактора, значит и EXE-шник, скорее всего, будет потом нестабильно работать, выдавая мне время от времени неприятные сюрпризы.

Цитата Сообщение от The trick Посмотреть сообщение
Power_Basic, это не нужно вообще. Если хочется можно просто понизить приоритет потоков.
Спасибо за идею! Мне как-то и в голову не пришло.
Сейчас у меня все "рабочие" потоки с "нормальным" приоритетом, а один - "управляющий" - с повышенным на единицу.

Попробовал. Ну вроде бы, действительно, постабильнее стало работать.
0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,044
Записей в блоге: 7
12.04.2020, 17:53
Цитата Сообщение от Power_Basic Посмотреть сообщение
Но вот испытание некоторыми моими собственными программами винда время от времени не выдерживает
Это просто вылет программы. К винде отношения не имеет.

Цитата Сообщение от Power_Basic Посмотреть сообщение
А поскольку я сейчас почти всегда запускаю свои программы из-под редактора методом "Compile and Run", то и закрывается она вместе с редактором
Это в PowerBasic?

Цитата Сообщение от Power_Basic Посмотреть сообщение
Спасибо за идею! Мне как-то и в голову не пришло.
Понижение приоритета потоков не избавит от 100% загрузки процессора.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну вроде бы, действительно, постабильнее стало работать.
Если программа работает нестабильно, нужно в ней искать ошибку. Потому что "протирая тряпочной стекло машины неисправность не устранить".
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
17.04.2020, 19:51  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Это просто вылет программы. К винде отношения не имеет.
Да это понятно.

Цитата Сообщение от locm Посмотреть сообщение
Это в PowerBasic?
Ну да, он самый

Цитата Сообщение от locm Посмотреть сообщение
Понижение приоритета потоков не избавит от 100% загрузки процессора.
Похоже что так.

Цитата Сообщение от locm Посмотреть сообщение
Если программа работает нестабильно, нужно в ней искать ошибку. Потому что "протирая тряпочной стекло машины неисправность не устранить".
Ну вы же мне сами во флудной ветке, посвящённой Фри Бейсику, посоветовали использовать больше потоков, чем я изначально предполагал
Изначально было задумано, что будет 5 "рабочих" потоков и один "основной", исходя из количества физических ядер процессора на моём компе (6 штук). На самом деле, я вам за эту тдею благодарен.
С тех пор вот и экспериментирую, ищу оптимальное число потоков и оптимальный режим обратной связи.
0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,044
Записей в блоге: 7
17.04.2020, 20:23
Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну да, он самый
Он что интерпретатор? Иначе почему вылетает вместе с разрабатываемым приложением?

Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну вы же мне сами во флудной ветке, посвящённой Фри Бейсику, посоветовали использовать больше потоков, чем я изначально предполагал
В правильно написанной программе стабильность работы не зависит от числа потоков.

Цитата Сообщение от Power_Basic Посмотреть сообщение
Изначально было задумано, что будет 5 "рабочих" потоков и один "основной", исходя из количества физических ядер процессора на моём компе (6 штук).
Число потоков необязательно должно быть не больше числа ядер. Их может быть тысячи.

Цитата Сообщение от Power_Basic Посмотреть сообщение
С тех пор вот и экспериментирую, ищу оптимальное число потоков
Стабильность работы не зависит от числа потоков.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
17.04.2020, 21:56  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Он что интерпретатор? Иначе почему вылетает вместе с разрабатываемым приложением?
Да нет, компилятор. Запускаю из редактора (Compile and Run).
На самом деле, сам редактор всё-таки редко вылетает. Гораздо чаще происходит вот так: до какого-то момента все потоки работают нормально, это видно по полосам прогресса для каждого из них. Ну вот, например, скриншоты одной из попыток. В данном случае используется 20 потоков (для каждого персональная полоса прогресса для визуализации). Диапазон загрузки процессора в данном "эксперименте" выставлен на максимум 75% и минимум 37%.
До какого-то момента всё в порядке, а потом окно программы тупо пропадает и усё

Цитата Сообщение от locm Посмотреть сообщение
В правильно написанной программе стабильность работы не зависит от числа потоков.
Ну дык я же как раз к этому и стремлюсь
Для обратной связи пытаюсь использовать счётчики загрузки процессора.

Цитата Сообщение от locm Посмотреть сообщение
Число потоков необязательно должно быть не больше числа ядер. Их может быть тысячи.
Ну сейчас у меня используется 24 потока максимально. Если использовать один, тогда, разумеется, никогда ничего не вылетает, но и ползает как черепаха

Цитата Сообщение от locm Посмотреть сообщение
Стабильность работы не зависит от числа потоков.
А от чего она зависит-то?
Миниатюры
Загруженность процессора?   Загруженность процессора?   Загруженность процессора?  

0
Эксперт по электронике
7139 / 3319 / 341
Регистрация: 28.10.2011
Сообщений: 13,044
Записей в блоге: 7
17.04.2020, 22:08
Цитата Сообщение от Power_Basic Посмотреть сообщение
А от чего она зависит-то?
От наличия ошибок в программе. Если ошибок нет и программа написана по всем правилам (включая правила разработки многопоточных приложений), вылетать не должно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2020, 22:08

Загруженность процессора 50%
Доброго времени суток! Сегодня появилась такая проблема - svchost.exe грузит процессор на 50%. Поискал в интернете решение проблемы:...

Windows 7 Загруженность процессора
ставил как x86 так и x64 постоянно не с того ни с сего грузится проц, сборка 7600 рус, активированная, на бета - версиях вроде таког оне...

Не понятная загруженность процессора.!
Всем здравствуйте. Несколько дней назад возникла такая странность: Постоянно системный процесс NT Kernel & System загружает мой 4-х...

Загруженность процессора на 100%
Вообщем проблема у меня такая... винда 7 64 бит. всё работает отлично НО когда я запускаю игру минут так через 5 проц начинает грузится на...

Влияет ли ОС на загруженность процессора?
Влияет ли ОС на процессор(то есть если я установлю вместо WIndows 7 Windows Xp, нагрузка на проц будет меньше?)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru