Разработка программы диспетчеризации запуска приложений С++

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Сионист писал(а):Ну ка какой пинг у единственного на планете сервера некоторого сервиса? О реактивности интерфейса с таким пингом можно забыть. Сервер в каждом городе? И сколько ты будешь ждать удовлетворения заявки на установку такого то приложения? Ведь всем без исключения всё подряд не нужно, а прога могла быть ещё и написана после запуска городского сервера. Неделю? Мне бы твой оптимизм.
https://azure.microsoft.com/
https://cloud.google.com/
https://www.openstack.org/

На Азуре я недавно создал виртуальный сервер в США с гигабитным каналом, двумя гигабайтами памяти и процессором Xeon всего за 5 минут. У конкурентов должно быть также.
Сионист писал(а): Или всем подряд выдать админские привилегии? Поздравляю, можешь выбросить сервера.
То есть ты не знаешь про виртуализацию ничего. Даже что она в принципе существует. Хотя технология это не новая.
Сионист писал(а):В Новокузнецке телефон может две-три недели протянуть на одной зарядке, в Крапивино аккумулятор на одной лишь проверке "А в сети ли я?" садится в ноль меньше, чем за сутки, а в режиме разговора аккумулятор по паспорту рассчитан всего на 4 часа
Ну если бы прошивку написал ты, он бы везде садился за 4 часа.
2B OR NOT(2B) = FF
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Мне тоже это Эй Си всегда было непонятно...

Выскажусь и по теме дискуссии: читаю с удовольствием и с нетерпением жду продолжения :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Чарлз Петзолдт "Программирование для Windwows 95" 2 тома, 1098 стр. BHV Санкт-Петербург 1997 г. второй том стр. 768 27-я строка от сверха страницы:
Один из способов добиться этого состоит в том, чтоб первичный поток обрабатывал пользовательский ввод и другие сообщения, возможно создавая при этом вторичные потоки в процессе.
. А вот фоновых потоков не бывает.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Сионист писал(а):Чарлз Петзолдт "Программирование для Windwows 95" 2 тома, 1098 стр. BHV Санкт-Петербург 1997 г. второй том стр. 768 27-я строка от сверха страницы: .
Взял бы что-то поновей. Про XP хотябы. Хотя даже XP уже не поддерживается.
Сионист писал(а):
А вот фоновых потоков не бывает.
https://www.google.ru/webhp?sourceid=ch ... d%20thread

Результатов: примерно 18 700 000

https://www.google.ru/webhp?sourceid=ch ... ary+thread

Результатов: примерно 9 730 000

В общем случае background thread встречается в публикациях в два раза чаще, чем secondary thread. И это не означает что secondary thread действительно существует как понятие уровня операционной системы. Это классификация программиста: этот тред делает главную работу, этот - вспомогательный. Для ОС они равнозначны.
2B OR NOT(2B) = FF
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Поддерживаю Absurd'а. Термины primary/secondary thread относятся к архитектуре приложения. А термин background thread - к архитектуре ОС.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Термины primary/secondary thread относятся к архитектуре приложения. А термин background thread - к архитектуре ОС.
Пару лет назад мне пришлось написать небольшую программу для этого чуда. Там действительно было два треда: первичный и вторичный.

http://www.schneider-electric.com/produ ... icon-m340/
2B OR NOT(2B) = FF
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Absurd писал(а):Если треду назначен приоритет BACKGROUND
Фоновым уже приоритет оказался, а только что таким был сам поток.
Absurd писал(а):Приоритет это мнение программиста о том насколько значимым является данный тред. Есть еще мнение ОС, которая собственно и решает кому сколько давать.
Сколько дать конкретно и насколько важна сама задача. Система обязана обслужить все потоки, разумеется она не может всегда давать, сколько хочет программист. Плюс есть мнение о приоритете пользователя, разработчика, системы и реальность. И если быстрое выполнение такого то потока вдруг стало необходимым для быстрой работы более приоритетного, так пусть повышает. Сами говорите, что временно и по ситуации. Что важней: сохранение жизни экипажа, или экономия топлива? Конечно не до жиру, быть бы живу. А ситуация вдруг сложилась так, что экономить топливо нужно именно для того, чтоб сохранить жизнь экипажа? Тогда его будут экономить всеми возможными способами. А теперь вопрос: как поведёт себя система, если быстрое исполнение среднеприоритетного потока нужно для быстрой работы малоприоритетного, а процессорное время ждёт ещё десятка два потока с почти высшим приоритетом?
Absurd писал(а):И это не означает что secondary thread действительно существует как понятие уровня операционной системы. Это классификация программиста: этот тред делает главную работу, этот - вспомогательный. Для ОС они равнозначны.
Нет. Первичность и вторичность потоков зависит от того, как и чем они запускаются. Первичный запускается системой при старте процесса и завершается при закрытии процесса, вторичные же запускаются в любой момент другими потоками своих процессов и завершаются также в любой момент вне какой либо связи с запуском и завершением процесса.
Absurd писал(а):В общем случае background thread встречается в публикациях в два раза чаще, чем secondary thread
В твоих и в публикациях тебе подобных, то есть по разряду сепулек и декавилек. Ты их определить попробуй. Приоритет - штука достаточно переменная и для определения самого потока не годная. Но годная для редкой выдачи потоку процессорного времени и при этом не требующая явного слыпа. А нет определения - нет и разновидности потоков.
Absurd писал(а):Я кажется понял что ты называешь первичным потоком - это тот поток который был создан в результате выполнения CreateProcess. Но он ничем не отличается от других потоков. Есть мнение что завершение этого "первичного" потока завершает работу программы, но оно ошибочно. ОС удаляет процесс когда _все_ треды программы завершили свою работу. Она их не отличает друг от друга. Но есть такой ньанс что все треды убиваются библиотекой C Runtime после выхода из функции main()/WinMain().
А она в первичном потоке. То есть при завершении первичного потока прибиваются вторичные и завершается весь процесс. Что и требовалось доказать. А что небольшая техническая задержка возникает и фактическое закрытие происходит, когда ОС выполнит принудительное завершение вторичных потоков, так это иначе просто фиг реализуешь. Если бы потоки не различались, то процесс продолжался бы и после завершения main/WinMain, пока все функции вторичных потоков не выполнят return. А ещё, не все потоки имеют очереди сообщений.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Absurd писал(а):Приоритет это мнение программиста о том насколько значимым является данный тред. Есть еще мнение ОС, которая собственно и решает кому сколько давать.
Сколько дать конкретно и насколько важна сама задача. Система обязана обслужить все потоки, разумеется она не может всегда давать, сколько хочет программист. Плюс есть мнение о приоритете пользователя, разработчика, системы и реальность. И если быстрое выполнение такого то потока вдруг стало необходимым для быстрой работы более приоритетного, так пусть повышает. Сами говорите, что временно и по ситуации. Что важней: сохранение жизни экипажа, или экономия топлива? Конечно не до жиру, быть бы живу. А ситуация вдруг сложилась так, что экономить топливо нужно именно для того, чтоб сохранить жизнь экипажа? Тогда его будут экономить всеми возможными способами. А теперь вопрос: как поведёт себя система, если быстрое исполнение среднеприоритетного потока нужно для быстрой работы малоприоритетного, а процессорное время ждёт ещё десятка два потока с почти высшим приоритетом?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Absurd писал(а):И это не означает что secondary thread действительно существует как понятие уровня операционной системы. Это классификация программиста: этот тред делает главную работу, этот - вспомогательный. Для ОС они равнозначны.
Нет. Первичность и вторичность потоков зависит от того, как и чем они запускаются. Первичный запускается системой при старте процесса и завершается при закрытии процесса, вторичные же запускаются в любой момент другими потоками своих процессов и завершаются также в любой момент вне какой либо связи с запуском и завершением процесса.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Сионист писал(а):Фоновым уже приоритет оказался, а только что таким был сам поток.

Я кажется понял что ты называешь первичным потоком - это тот поток который был создан в результате выполнения CreateProcess. Но он ничем не отличается от других потоков. Есть мнение что завершение этого "первичного" потока завершает работу программы, но оно ошибочно. ОС удаляет процесс когда _все_ треды процесса завершили свою работу. Они равнозначны. Но есть такой ньанс что все треды убиваются библиотекой C Runtime после выхода из функции main()/WinMain().

http://blogs.msdn.com/b/oldnewthing/arc ... 54832.aspx

If instead of calling ExitProcess you merely return from the main thread of a process, does the process terminate?

No, but maybe yes.

This is another one of the places where the C runtime behaves differently from raw Win32.

Under raw Win32, a process exits when any thread chooses to exit the process explicitly (usually by calling ExitProcess) or when all threads have exited. Exiting the main thread will not result in the process exiting if there are any other threads still active. According to the old-fashioned model of how processes exit, a process was in control of all its threads and could mediate the shutdown of those threads, thereby controlling the shutdown of the process. (Of course, nowadays, with the thread pool, COM worker threads, and other threads doing random background work, the idea of being in control of all the threads in the process is now just a reminder of those simpler days.)

On the other hand, the C runtime library automatically calls ExitProcess when you exit the main thread, regardless of whether there are any worker threads still active. This behavior for console programs is mandated by the C language, which says that (5.1.2.2.3) "a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument." The C++ language has an equivalent requirement (3.6.1). Presumably, the C runtime folks carried this behavior to WinMain for consistency.

This also means that if you decide to exit your main thread by calling ExitThread directly, then you aren't returning from the main function. Instead, you've leapt into the Win32 world where the process will not exit until all threads are gone.
2B OR NOT(2B) = FF
Ответить