Discuss Scratch

amirchik2209
Scratcher
11 posts

Грузит процессор

Можете подсказать как избежать загрузки процессора? Когда я использую циклы или ожидания процессор начинает сильно нагружаться, хотя ничего сверхъестественного не выполняется. Был бы очень признателен примеру.
White_Lord
Scratcher
1000+ posts

Грузит процессор

amirchik2209 wrote:

Можете подсказать как избежать загрузки процессора? Когда я использую циклы или ожидания процессор начинает сильно нагружаться, хотя ничего сверхъестественного не выполняется. Был бы очень признателен примеру.
А что за процессор?

ꅏꃅꀤ꓄ꍟ_꒒ꂦꋪꀸ the Scratcher.

The host of six studios:

Best projects on Scratch, Art Island, Music On Scratch, White_Lord and Friends, #BringBackManagerRights, Русское сообщество скретчеров 4.0 and Клуб 1000 ☕️.

- Honorary member of BLS -

I'm Scratcher from Ukraine. ☕️ I like to draw, read and watch movies.



amirchik2209
Scratcher
11 posts

Грузит процессор

White_Lord wrote:

amirchik2209 wrote:

Можете подсказать как избежать загрузки процессора? Когда я использую циклы или ожидания процессор начинает сильно нагружаться, хотя ничего сверхъестественного не выполняется. Был бы очень признателен примеру.
А что за процессор?
AMD Ryzen 3900 12-core processor ×24
3DArte
Scratcher
57 posts

Грузит процессор

amirchik2209 wrote:

White_Lord wrote:

amirchik2209 wrote:

Можете подсказать как избежать загрузки процессора? Когда я использую циклы или ожидания процессор начинает сильно нагружаться, хотя ничего сверхъестественного не выполняется. Был бы очень признателен примеру.
А что за процессор?
AMD Ryzen 3900 12-core processor ×24
Что-то мне подсказывает, что вопрос должен быть задан в ветке https://scratch.mit.edu/discuss/topic/305770/. Ну, да, ладно.
На этот вопрос не так просто ответить ничего не зная о проекте. Для каких-то проектов высокая загрузка процессора будет нормой, а для каких-то - ошибками при написании кода. К примеру, трассировщики лучей и программы с тяжелыми математическими расчетами всегда будут сильно грузить процессор.

Для понимания, как решить проблему с загрузкой процессора нам надо понять как ОС определяет, что та или иная задача(программа) грузит процессор и, что такое вообще загрузка. Процессор постоянно выполняет какие-либо команды, а ОС решает, какие именно команды(какой код) должен выполнять процессор. Для упрощения рассмотрим одноядерный однопотоковый процессор. Такой процессор может выполнять команды только последовательно - одна команда за другой. Может возникнуть вопрос: как же выполнять программы одновременно на таком процессоре? Для этого придумали следующую схему: ОС дает маленький интервал времени(квант времени) для задачи(программы), во время которой выполняется код одной из этих задач, после истечения времени ОС переключается на другую задачу и все повторяется. Таким образом, создается иллюзия, что все программы работают одновременно. В старых ОС(к примеру Windows 3.x) сама программа должна была отдавать управление ОС когда не требовалось что-либо делать. В таких случаях, не редко возникали подвисания системы, когда программа сама подвисала.

На самом деле, многие задачи не используют полностью квант времени, который был предоставлен ОС. Программа часто обращается к ОС и постоянно от нее что-то ждет: это могут быть данные с клавиатуры или нужно считать что-то из файла и т.д. В таких случаях, ОС переключается на следующую задачу. Для таких задач ОС показывает небольшую загрузку процессора. Т.е., чем больше задача использует свой квант времени - тем больше загружает процессор. И наоборот, если программа постоянно что-то ждет, то она почти не тратит ресурсы процессора. Поэтому, если мы вставим в программу пустой бесконечный цикл - ОС покажет высокую загрузку процессора от этой задачи. Хотя, по факту она ничего делать не будет. Если же мы вставим в этот цикл команду ожидания в 1 сек, то получим опять небольшую загрузку процессора. Т.к., команда ожидания передает управления ОС.

Подобное происходит и с программами Скрэтча, но есть некоторые нюансы. Скрэтч выполняется в JavaScript-е, а JavaScript работает только на одном потоке. Т.е., не важно сколько ядер и потоков поддерживает тот или иной процессор. Все-равно, Скрэтч будет грузить только один поток.
Код в Скрэтч выполняются по разному. Если код выполняется в функции с установленной опцией “Запустить без обновления экрана” - этот код не ждет вывода на экран и, как правило, хорошо нагружает процессор. Тот же код выполняющийся как обычный не сильно будет грузить процессор. Т.к. Скрэтч после каждой команды пытается обновить экран. Пример с циклом тут тоже применим. На счет проблемы с задержкой - команда задержки возможно представляет из себя цикл с проверкой времени. Поэтому в Скрэтче эта команда может нагружать процессор.
greg1234567890f
Scratcher
1000+ posts

Грузит процессор

3DArte wrote:

Что-то мне подсказывает, что вопрос должен быть задан в ветке https://scratch.mit.edu/discuss/topic/305770/. Ну, да, ладно.

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

Для понимания, как решить проблему с загрузкой процессора нам надо понять как ОС определяет, что та или иная задача(программа) грузит процессор и, что такое вообще загрузка. Процессор постоянно выполняет какие-либо команды, а ОС решает, какие именно команды(какой код) должен выполнять процессор. Для упрощения рассмотрим одноядерный однопотоковый процессор. Такой процессор может выполнять команды только последовательно - одна команда за другой. Может возникнуть вопрос: как же выполнять программы одновременно на таком процессоре? Для этого придумали следующую схему: ОС дает маленький интервал времени(квант времени) для задачи(программы), во время которой выполняется код одной из этих задач, после истечения времени ОС переключается на другую задачу и все повторяется. Таким образом, создается иллюзия, что все программы работают одновременно. В старых ОС(к примеру Windows 3.x) сама программа должна была отдавать управление ОС когда не требовалось что-либо делать. В таких случаях, не редко возникали подвисания системы, когда программа сама подвисала.

На самом деле, многие задачи не используют полностью квант времени, который был предоставлен ОС. Программа часто обращается к ОС и постоянно от нее что-то ждет: это могут быть данные с клавиатуры или нужно считать что-то из файла и т.д. В таких случаях, ОС переключается на следующую задачу. Для таких задач ОС показывает небольшую загрузку процессора. Т.е., чем больше задача использует свой квант времени - тем больше загружает процессор. И наоборот, если программа постоянно что-то ждет, то она почти не тратит ресурсы процессора. Поэтому, если мы вставим в программу пустой бесконечный цикл - ОС покажет высокую загрузку процессора от этой задачи. Хотя, по факту она ничего делать не будет. Если же мы вставим в этот цикл команду ожидания в 1 сек, то получим опять небольшую загрузку процессора. Т.к., команда ожидания передает управления ОС.

Подобное происходит и с программами Скрэтча, но есть некоторые нюансы. Скрэтч выполняется в JavaScript-е, а JavaScript работает только на одном потоке. Т.е., не важно сколько ядер и потоков поддерживает тот или иной процессор. Все-равно, Скрэтч будет грузить только один поток.

Код в Скрэтч выполняются по разному. Если код выполняется в функции с установленной опцией “Запустить без обновления экрана” - этот код не ждет вывода на экран и, как правило, хорошо нагружает процессор. Тот же код выполняющийся как обычный не сильно будет грузить процессор. Т.к. Скрэтч после каждой команды пытается обновить экран. Пример с циклом тут тоже применим. На счет проблемы с задержкой - команда задержки возможно представляет из себя цикл с проверкой времени. Поэтому в Скрэтче эта команда может нагружать процессор.
Слишкам многа букав

How to see full signature (Tested on FireFox)
  1. Right click on separator
  2. Select “Inspect Element.”
  3. Uncheck “max-height” in “.postsignature”.
  4. Done!
This is not my full signature!


Interesting links:
https://coolbug.org/users/greg/ — My site
https://gh.vercte.net/forumoji/ — Forum-style Unicode emojis
https://turbobuilder-steel.vercel.app/ — TurboWarp and PenguinMod Extension Maker
https://minetest.dustlabs.io/Minetest online
Cool Cat:
Code:
[img=https://%61ssets.scratch.mit.edu/scratchr2/static/.%2E/.%2E/891951283e99d232dcbc1022f0724e34.png]
's code:
[img]https://%61ssets.scratch.mit.edu/scratchr2/static/.%2E/.%2E/ca2e49ee5a3657e25d93f1bf39818ef7.png[/img]
3DArte
Scratcher
57 posts

Грузит процессор

greg1234567890f wrote:

Слишкам многа букав
А кто сказал, что будет легко?) Процессоры загрузил)
kelianor
Scratcher
100+ posts

Грузит процессор

greg1234567890f wrote:

3DArte wrote:

Что-то мне подсказывает, что вопрос должен быть задан в ветке https://scratch.mit.edu/discuss/topic/305770/. Ну, да, ладно.

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

Для понимания, как решить проблему с загрузкой процессора нам надо понять как ОС определяет, что та или иная задача(программа) грузит процессор и, что такое вообще загрузка. Процессор постоянно выполняет какие-либо команды, а ОС решает, какие именно команды(какой код) должен выполнять процессор. Для упрощения рассмотрим одноядерный однопотоковый процессор. Такой процессор может выполнять команды только последовательно - одна команда за другой. Может возникнуть вопрос: как же выполнять программы одновременно на таком процессоре? Для этого придумали следующую схему: ОС дает маленький интервал времени(квант времени) для задачи(программы), во время которой выполняется код одной из этих задач, после истечения времени ОС переключается на другую задачу и все повторяется. Таким образом, создается иллюзия, что все программы работают одновременно. В старых ОС(к примеру Windows 3.x) сама программа должна была отдавать управление ОС когда не требовалось что-либо делать. В таких случаях, не редко возникали подвисания системы, когда программа сама подвисала.

На самом деле, многие задачи не используют полностью квант времени, который был предоставлен ОС. Программа часто обращается к ОС и постоянно от нее что-то ждет: это могут быть данные с клавиатуры или нужно считать что-то из файла и т.д. В таких случаях, ОС переключается на следующую задачу. Для таких задач ОС показывает небольшую загрузку процессора. Т.е., чем больше задача использует свой квант времени - тем больше загружает процессор. И наоборот, если программа постоянно что-то ждет, то она почти не тратит ресурсы процессора. Поэтому, если мы вставим в программу пустой бесконечный цикл - ОС покажет высокую загрузку процессора от этой задачи. Хотя, по факту она ничего делать не будет. Если же мы вставим в этот цикл команду ожидания в 1 сек, то получим опять небольшую загрузку процессора. Т.к., команда ожидания передает управления ОС.

Подобное происходит и с программами Скрэтча, но есть некоторые нюансы. Скрэтч выполняется в JavaScript-е, а JavaScript работает только на одном потоке. Т.е., не важно сколько ядер и потоков поддерживает тот или иной процессор. Все-равно, Скрэтч будет грузить только один поток.

Код в Скрэтч выполняются по разному. Если код выполняется в функции с установленной опцией “Запустить без обновления экрана” - этот код не ждет вывода на экран и, как правило, хорошо нагружает процессор. Тот же код выполняющийся как обычный не сильно будет грузить процессор. Т.к. Скрэтч после каждой команды пытается обновить экран. Пример с циклом тут тоже применим. На счет проблемы с задержкой - команда задержки возможно представляет из себя цикл с проверкой времени. Поэтому в Скрэтче эта команда может нагружать процессор.
Слишкам многа букав
Проще говоря Скрэтч был бы быстрее если бы компилировал проекты в Машинный код (или в c, c++) и использовал многопоточность

Last edited by kelianor (Aug. 18, 2022 18:41:31)



3DArte
Scratcher
57 posts

Грузит процессор

kelianor wrote:

Проще говоря Скрэтч был бы быстрее если бы компилировал проекты в Машинный код (или в c, c++) и использовал многопоточность
Это беспорно. Но, можно всегда написать программу на системном языке, которая будет тормозить. Как и написать программу на интерпретируемом языке и она будет летать. Все зависит от профессионализма программиста. Хотя, даже на высокоуровневом языке нужно понимать, как работает компьютер. Тогда, многие проблемы становятся очевидными. Касательно многопоточности, к сожалению не все алгоритмы можно разбить на множество потоков.

Интерпретируемые языки могут выполняться на любом железе без компиляции, и в этом их сила. В свое время, Google сделал ставку на Java, который мог работать на разных типах процессоров. И выиграл. Теперь, Android одна из самых популярных систем в мире. Хотя, значительно позже им пришлось решать проблемы с производительностью. Теперь Java код может быть скомпилирован после установки приложения в систему.
Paddle2See
Scratch Team
1000+ posts

Грузит процессор

Эта тема закрыта, потому что уже есть похожая тема. Пожалуйста, не создавайте дубликаты уже существующих тем, если только их не требуется заменить. На русском форуме существуют список важных тем, созданных для того, чтобы не засорять форум и чтобы их просматривало как можно больше людей: https://scratch.mit.edu/discuss/post/4926271/ Пожалуйста, используйте эту тему:

https://scratch.mit.edu/discuss/topic/305770/

Scratch Team Member, kayak and pickleball enthusiast, cat caregiver.

This is my forum signature! On a forum post, it is okay for Scratchers to advertise in their forum signature. The signature is the stuff that shows up below the horizontal line on the post. It will show up on every post I make.
(credit to Za-Chary)



;

Powered by DjangoBB