|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
||||||
Тонкости потоков08.04.2014, 23:00. Показов 2486. Ответов 7
Метки нет (Все метки)
Не до конца понимаю что из себя представляет поток в яве андроида!
Сделал второй поток для помощи в отрисовке. Он в бесконечном цикле перебирает таблицу-очередь и обрабатывае лежащие в ней записи. Но... в тихом режиме он забирает 100% процессора! Даже если я ничего не трогаю. Попытался перед запуском понизить его приоритет Tread1.setPriority(Thread.MIN_PRIORITY); // Tread1.start(); Не помогло! Приходится ставить sleep(100) для потока. Это уменьшает нагрузку для процессора без сильных потерь. Но это подтормаживает его если в списке появляются новые записи - обрабатывает не сразу. Перебор списка крайне простой! Примерно так:
0
|
||||||
| 08.04.2014, 23:00 | |
|
Ответы с готовыми решениями:
7
Тонкости ООП в SurfaceView. Можно ли написать графический движок?
|
|
|
|
| 09.04.2014, 13:44 | |
|
sleep здесь вообще не нужен, а нужно здесь использовать wait/notify.
Т.е., когда нечего делать, поток не будет жрать процессорное время, а отдаст его другому потоку. Добавлено через 26 секунд ЗЫ: и никакие это не тонкости.
1
|
|
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|||
| 09.04.2014, 17:02 [ТС] | |||
|
Есть 3 действия: 1) команда от первого потока: добавить новые записи в таблицу 2) команда от первого потока: удалить устаревшие записи из таблицы 3) циклически обработать новые через небольшой интервал времени (10-50мс) после добавления и пометить их как "старые". Сейчас выкрутился так: Пока новых записей нет, интервал можно повысить, при добавлении нового уменьшить. После прокрутки цикла интервал повышается. Процессор заметно "остывает". Если я "заморожу" цикл/поток после пробега по всем записям, а в это время будет добавлена новая запись и цикл/поток "разморожен", то я могу пропустить последнюю не учтенную запись и остановиться... Конечно стоит подумать об остановке через таймер - это остудит проц если пользователь забудет выйти из программы, но как вычислить интервал через который можно окончательно приостановить... Но все равно спасибо! Примерно понял...
0
|
|||
|
|
|
| 09.04.2014, 17:11 | |
|
Мне это напоминает классическую задачу Producer-Consumer, 1-й поток что-то "производит", т.е. отправляет команды, 2-й - "потребляет", т.е. исполняет эти команды.
вот пример реализации: http://java67.blogspot.com/201... ample.html
0
|
|
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
| 09.04.2014, 17:37 [ТС] | |
|
Возник вопрос:
Сколько потоков может быть в андроиде? Если будет 100-1000 анроид умрет? Зависит ли это от версии андроида?
0
|
|
|
|
||
| 09.04.2014, 17:43 | ||
|
2. Не думаю, скорее всего будет брошен Exception. Или андроид убьет приложение. Можешь проверить. 3. Да, зависит.
1
|
||
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|||||
| 09.04.2014, 18:47 [ТС] | |||||
|
0
|
|||||
|
|
||||||||
| 10.04.2014, 16:05 | ||||||||
Сообщение было отмечено Tester64 как решение
Решение
Скажу сразу, я в этих вопросах не сильно компетентен, но попробую пояснить как это понимаю я сам.
Константу, которая отвечает за Thread stack size, можно найти в исходниках файла /vm/Thread.h. #define kDefaultStackSize по версиях: API 3 (Android 1.5) = 8KB API 4-10 (Android 1.6 - Android 2.3.7) = 12KB API 14-19 (Android 4.0 - Android 4.4.2) = 16KB Вот файл из исходников 4.4.2, строчка 79: https://android.googlesource.c... m/Thread.h Если под поток выделяется 16кб, то кажется, что когда их будет много, они сожрут всю доступную память, возможно, андроид начнет освобождать ее, убивая все что сможет убить, после чего получим OutOfMemoryError. Скорее всего, выброшен он будет при попытке создания нового потока и выделения под него памяти.
Решил проверить свою теорию.
Проверял этим: Кликните здесь для просмотра всего текста
Добавлено через 2 минуты По-ходу, стек для потока выделяется из heap, а не оперативной памяти.
2
|
||||||||
| 10.04.2014, 16:05 | |
|
Помогаю со студенческими работами здесь
8
Разработать программу, генерирующую n потоков в пуле потоков CLR Создание и завершение процессов и потоков. Приоритеты выполнения потоков Замедление работы потоков если запущено несколько потоков Синхронизация потоков на элементарном уровне (переключение потоков)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|