PDA

Просмотр полной версии : Многопоточность


s3dworld
23.12.2011, 12:29
Всем доброго утра!

Есть код, который последовательно через создание новых Loader'ов загружает изображения с сервера. Загрузил одно, грузит другое. В общем-то получается довольно долго. Можно как либо этот процесс ускорить? Например создать заранее нужное количество Loader'ов и в цикле прокрутить их на загрузку. А потом в одной функции обратного вызова подсчитывать количество срабатываний и уже двигаться дальше, если их число равно число сработанных load'ов. Что-то такое прокатит или какие варианты?

GBee
23.12.2011, 12:31
Попробуйте, разве самому не интересно, чем ждать ответа? А какой оргазм от того, что получится ;о))

s3dworld
23.12.2011, 12:36
GBee
> Попробуйте, разве самому не интересно, чем ждать ответа? А какой оргазм от того, что получится ;о))
Время тратить не хочется на поиски. Сроки)) Я оптимизирую код написанный другим программистом. Жду советов...

goodguy
23.12.2011, 12:50
Да, можно. Loader грузит файлы асинхронно.

s3dworld
23.12.2011, 12:52
GBee
> Да, можно. Loader грузит файлы асинхронно.
Но функция обратного вызова (укажу для всех Loader'ов одну) будет вызываться последовательно же?

goodguy
23.12.2011, 13:02
она будет вызываться столько раз, сколько загрузчиков кинет событие об окончании загрузки, которое слушается в классе. И вызываться будет в той последовательности, в какой загрузчики заканчивают свою работу. Если первый загрузчик грузит большую картинку, а второй маленькую, естественно второй отработает раньше

gloomyBrain
23.12.2011, 13:08
Да, колбэк вызывается по очереди. Все именно так потому что:
1) флеш плеер просит браузер загрузить а
2) флеш плеер просит браузер загрузить б
...
3) браузер выделяет потоки загрузки и начинает загружать
4) что-то загрузилось - браузер отдает контент флеш-плееру
5) у флеш плеера возникает событие Event.COMPLETE
6) если за 1 кадр произошло несколько событий, то они обрабатываются последовательно, в порядке их возникновения или приоритета слушателей.

То есть, грубо говоря, флеш плеер - это штука, которая "живет" один кадр. Набралось событий за этот кадр - они обработались. Переходим к следующему кадру, там снова собираем события и снова их обрабатываем.
Такой алгоритм работы называется state-machiene (ну или конечный автомат). У программы есть несколько состояний и она последовательно переходит из одного в другое все время своей жизни.

GBee
23.12.2011, 23:08
Время тратить не хочется на поиски. Сроки)) Я оптимизирую код написанный другим программистом. Жду советов...
//trollmode on
11:08 - 10:29 = 0:39 минут. Проверка самому составила бы минут 10-15.
//trollmode off

TanaTiX
23.12.2011, 23:14
Есть готовые решения. К примеру, BulkLoader.