Тема: Я новичок!
Показать сообщение отдельно
Старый 15.03.2013, 00:49   #91
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Я новичок!

Необходимо реализовать передачу кванта процессорного времени другим потокам. Самый ломовой (учитывая б3д) способ - вставить Delay 1 в конце тела цикла (ну можно ив начале - сами там, исходя из конкретики решаемой задачи, определитесь). По идее это должно спровоцировать переключение на другой поток и выделение ему некоторого дискретного минимального времени (вероятно, большего чем 1мс). В том виде, в каком код приведён сейчас, вы, фактически и говорите системе: выполнять с такой производительностью, с какой только возможно - именно поэтому нагрузка на цп 99%.
Нажмите на изображение для увеличения
Название: фргм1.jpg
Просмотров: 1061
Размер:	91.9 Кб
ID:	18934
(фрагмент статьи про многопоточность, касающийся темы)
А вообще - концептуально касаясь производительности код, условно (ох сейчас меня закидают за придумывание терминологии) можно разделить на два типа: "взаимодействие" и "работа". Первый вариант кода: подгруздка данных из сети, мониторинг портов, обновление GUI, реакция на ввод пользователя - не должны выполняться в бесконечном цикле без всяких ограничений, как то: событие от таймера, от внешнего потока, сообщающего о необходимости перерисовать окошко, прочитать сетевые пакеты из буфера и т.п. Второй вариант кода: грубо говоря, разнообразные расчёты (так или иначе решаемые на ПК задачи формализуются до вычислений). Причём во втором случае - всю необходимую для вычислений информацию мы уже получили благодаря коду "взаимодействия". Глупо ограничивать себя и не стараться выполнить задачу как можно быстрее. Последнее, разумеется не касается неких гибридных вариантов, где вычисления выполняются фоном, так как их тяжесть (негативный эффект создаваемый неконтролируемой нагрузкой) критичнее, времени их работы (например: архивация большого обёъма данных; размазанный во времени обработчик ИИ юнитов в RTS [когда каждый кадр принимается решение только по некоторому количеству юнитов, чтобы сгладить выбросы в нагрузке, избежав подлагивания картинки]).

Вы привели код явно для "взаимодействия" а закодили его как "работа".

Пример из жизни:
код для вычисления сотни примеров:
быстро-быстро берём и решаем первый, затем второй и т.д.
код для взаимодействия:
-Петя, как освободишься - дай знать, а я пока посплю.

Неудачная архитектура (применения подхода "работа" в задаче "взаимодействие"):

В данном случае, Ослу не имеет смысл создавать повышенную нагрузку на ЦП (Шрек* - будем рассматривать именно их диалог, хотя Шрека то и дело подменяет Феона), т.к. очевидно, что:
1) такое разрешение по времени не нужно;
2) рациональнее "уснуть" и ждать наступления события.

*-на самом деле по аналогии это сущность персонализирующая собой совокупность "ЦП+поток оценки геоположения". Можно рассмотреть ситуацию иначе: первый поток - это Осёл, второй - Шрек, воздух (среда, позволяющая информации распространятся в виде звуковых колебаний) - шина передачи данных. Вместо того, чтобы ожидать сигнального пакета от второго потока, первый флудит в шину с максимальной частотой, делая невозможной работу третьего потока - Феоны - из-за перманентной занятости шины. ЦП - это некий формальный исполнитель программы с тремя потоками**: два из них постоянно работают со структурой (интерфейсной частью шины данных), третий поток спит (т.к. его культурность алгоритмически обозначает необходимость дождаться одновременной доступности в течение некоторого времени*** шины [разрешающего значения сигнального поля интерфейсной структуры] и доступности одного из потоков, с которым предстоит вести диалог - нетрудно заметить что это событие не наступит никогда: Осел или Шрек свободны, только когда говорит второй из них, т.е. занята шина).

**- ну это уже вопрос философии. С солипсистской точки зрения, все живые существа управляются на единственном реальном cpu - вашем мозге. См. ещё Телеология, Логос.
Здесь же мы рассматриваем локальный участок вселенной (внутри кареты), поэтому строим модель только для него.

*** - задержку можно интерпретировать как долгую реакцию, связанную с низким приоритетом потока Феона (планировщик выделяет квант Феоне так редко, что возможность говорить к этому времени всегда уже обнаруживает Осёл или Шрек), или как искусственную задержку в работе, величина которой позволяет отделить событие "пауза между словами" и "тишина".

В сущности, все модели неправильны, но некоторые полезны
Джордж Бокс
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?

Последний раз редактировалось impersonalis, 15.03.2013 в 02:05.
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
boajuse (16.03.2013), Кирпи4 (16.03.2013), SBJoker (15.03.2013), St_AnGer (15.03.2013)