|
|
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Нуф-Нуф, я тебе, конечно, верю, но почему "параллельная функция" отработала быстрее "последовательной" ты по-русски сказать можешь? Или признать, что у меня в 1-м камне их штук 8? "Параллельная" по-твоему: 1) запуск запроса 2) принимаем запрос, располагаем в потоке Jet с МЕНЬШИМ приоритетом 3) цикл (это поток с большим приоритетом, поэтому Jet-овский отдыхает) 4) rs.MoveLast – заставляет остановить поток VBA и выполнять поток Jet 5) возврат в поток вба хотя бы для дебуг.принт "Последовательная" по-твоему: 1) запуск запроса 2) принимаем запрос, располагаем в потоке Jet с МЕНЬШИМ приоритетом 3) rs.MoveLast – заставляет остановить поток VBA и выполнять поток Jet 4) цикл 5) возврат в поток вба хотя бы для дебуг.принт "Переключений минимум". По сравнению с чем, млин? И там и тут по 4 строки. Либо я по пояс деревянный, либо одно из двух. Причем 5-м пунктом у тебя стоит 5) выполнение запроса Какого запроса?! - мы на 4 шаге уже получили последнюю запись. Или запрос не отработался еще весь? Да и х. с ним, мне запрос не нафих не нужен, и там, и там, я уже имею, например, кол-во возвращенных им записей. Мне непонятно, почему эта(!) программа из 4 строк отрабатывается по-разному. (Результаты стабильны, не реагируют на кол-во запусков с точностью до 3-х значащих цифр разницы). Нет, пойду я спать. (Ты, кстати, чего сам не спишь?) А завтра буду работать и заодно почитаю где-нить про асинхронные запросы. Сейчас только покурю... И Гетца полистаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 05:29 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
>но почему "параллельная функция" отработала быстрее "последовательной" ты по-русски сказать можешь? Geo, могу. Во-первых, в твоих тестах небыло никакого "паралельного" выполнения. В своих "ночных" постах я описал тест (для форм) и модификацию твоего теста, которые помогут тебе :) Во-вторых, Многозадачная система однако - погрешность в замерах времени неизбежна в любом случае. >"Переключений минимум". По сравнению с чем, млин? И там и тут по 4 строки. Либо я по пояс деревянный, либо одно из двух. :) Гео, еще пол-года назад я тоже ну нифига не знал о всяких там потоках, приоритетах, локальных стеках, мьютексах, симафорах, критических секциях и еще туевой хучи (кстати, о кучах тоже не знал:). Сейчас всё НАЧИНАЕТ проясняться. Спустя пол-года! Чё бы там нибыло, я не считаю себя по пояс деревянным, во-первых потому, что для меня это не первоочередная задача, а во-вторых из-за того, что я ранее никогда не мыслил и не оперировал понятиями многозадачных ОС. А ты хочешь за пару дней (на сколько я понял раньше ты не занимался в плотную этим вопросом) всё сразу схавать :) По поводу твоих тестов... Еще раз, выполни МОИ вариатны тестов и убедись, что в ТВОИХ вариантах ну нет ПАРАЛЛЕЛЬНОГО выполнения. В моих пояснениях в самой первой строке указаны потоки и все нижние строки разнесены по ним. Правда хреновато получилось. Попробую по другому оформить: Последовательное выполнение: Код: plaintext 1. 2. 3. 4. 5. 1 - запускаем запрос, т.е. вызываем ADO-метод. Кстати, здесь я логически вынес ADO в отдельный поток, хотя на самом деле это (видимо) не так - коль скоро ADO расположена в dll-ке, то она выполняется за счет вызвавшего ее потока, хотя, конечно, может создавать и собственные. И еще раз повторю, что главный вопрос не в том, как работает Виндоус, а как реализован Аксес! 2 - ADO получает запрос и выполняет его в синхронном режиме (тормознув поток VBA) 3 - выполнение цикла 4 - конец "Параллельное" выполнение (Хотя оно у тебя не получилось параллельным!): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 1 - запускаем запрос, т.е. вызываем ADO-метод. 2 - ADO получает запрос и выполняет его в Асинхронном режиме (запустив поток Jet с меньшим приоритетом). Т.е. здесь поток Jet уже может выполнять запрос, но ему просто не дают шанса, ведь есть более приоритетная задача - крутить цикл; 3 - выполнение цикла 4 - rs.MoveLast – заставляет остановить поток VBA и выполнять поток Jet 5 - выполняется запрос 6 - конец Кстати, приоритетность потоков 100 пудово не единственный фактор! Т.е. потока синхранизируются одним из стандартных механизмов, но каким и как я не знаю. Т.е. обсуждаемый здесь вопрос не по Многозадачности и Виндоус, а по реализации Многозадачности Аксесом стандартными механизмами Виндоус. Разница ОЧЕНЬ ВАЖНА! О реализации винды писано моте информации (оно и понятно), а о реализации акса - практически ничего... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 11:39 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Нет, брат, так просто ты от меня не отвертишься. Я, после получения своих результатов, избегал пользоваться терминами "асинхронный", да и "паралельный" употреблял преимущественно в кавычках. 1. "Параллельная" функция у тебя содержит 6 шагов по сравнению с 4-мя шагами "последовательной". Т.е. она должна выполняться дольше? У меня же получилось наоборот. Быстрее, более чем на 20%. Погрешность в замерах времени? Я ж сказал, что запускал их несколько раз, и сейчас запустил. И - циферка в циферку - тот же результат. Вообще, я берусь утверждать, что мои процедуры в обоих случаях заставляю акцес инициализировать равное кол-во переключений. Более быстрое выполнение "параллельного" варианта обусловлено, скорее, как раз виндами, т.к. они, при всей своей вытесняющей многозадачности, обязаны отдавать процессорное время и задаче с меньшим приоритетом, иначе они бы работали как в известном анекдоте про Билла Гейтса и дискету. Возможно, и в том, и в другом случае Jet получает свое время, но в "параллельном" он находит, чем это время занять, а в "последовательном" просто рапортует, что делать, мол нечего, и спасибо на добром слове. 2. В Гетце (2-й том, 1-го у меня сейчас нету) по оглавлению не встретил ничего похожего, но, думаю асинхронные запросы - это запросы, в первую очередь исполняемые именно на сервере (пусть даже им выступает лок. к-р), не в Акцессе. Тогда по определению они должны давать выигрыш в скорости работы - аксу делать-то нечего, сиди себе да опрашивай StillExecuting. 3. Так и знал, что спать буду плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 12:41 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
>Нет, брат, так просто ты от меня не отвертишься. НА-СИ-ЛУ-ЮТЬ!!! Гео, да ты что? Я неслыханно рад, что нашелся еще один человек, который пытается разобраться в том, как же это все работает, а не "отвертивается" словами типа: "Акс - это среда быстрой разработки и информации из Helpа для работы с ним вполне достаточно". Другое дело, что мы не можем никак синхронизировать наши термины и наши исходные понятия :( >1. "Параллельная" функция у тебя содержит 6 шагов по сравнению с 4-мя шагами "последовательной". Т.е. она должна выполняться дольше? У меня же получилось наоборот. Быстрее, более чем на 20%. Эти 6 шагов - всего лишь мое предположение и как реально работает АКСЕСС я не знаю. На счет всего остального - х.з. Единственное, что могу утверждать - пока ты не проведешь описанные мной тесты, не проанализируешь результаты, не сделаешь выводы и не выложишь их сюда - мы так и будем стоять на месте, выясняя кто и что имел в виду под термином "параллельно". Я не пытаюсь тебя нагло эксплуатировать (типа, пусть всё сделает, а мне потом расскажет) - я эти тесты давно проделал. И даже еще одни тесты и еще одни... Но мы даже с нашими первыми не разобрались. А на сегодня у меня всё. Инет "закончился" :) До завтра! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 14:11 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
2Нуф-Нуф Попробовал я сделать то что ты предложил: №1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. №2 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вот результаты: №1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. №2 src]Мешаем загружать записи 1 1 1 1 ...[/src] А вот еще одна: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И ее результат: Код: plaintext 1. 2. 3. 4. 5. Эта, последняя - всего лишь небольшая переделка моего первого теста. Т.е. кол-во записей вроде-бы тоже = 1, но в итоге переход к последней записи, после того как мы, вроде бы, не давали Jet'у передохнуть, дался ему намного легче... Объясняй :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 17:08 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Однажды, после долгих раздумий,заметил, что Асинхронность - это всего лишь DoEvents внужных местах. Что успешно и применял. Очень хорошо получаеться использовать асинхронность в клиент-серверных приложениях - только не забыдь предусмотреть "отваливанивание" клиента. С mdb - сложней: умер клиент - умерла "асинхронность". Пример: оператор нажав кнопку Сохранить документ (к-ая запускает 10минутную процедуру(ы)) - ... выключил ПК - а чё - документ-то провелся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 18:22 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
не в тему.... а что делает акс когда пишет "Обработка команды..." ? уж не выполняет ли какие действия связанные с асинхронностью ? у меня большая проблема. это "обработка команды" гадит весь интерфейс программы. мелькание не управляемое (уже после эхо=тру), тармаза... и что может делать акс(адр) 0.3 сек? уже после обработки всех действий оператора? доделывать асинхронные дела? какие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 22:17 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
доделывать асинхронные дела? Хршо... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 22:24 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
тебе смешно ...... а я всё что можно сломал на этим ужо бредить начал... решение красивое. алгоритмы всё решены красиво. все дело идет к прекраной конфетке... все нравится ... а эта гадость обмазывает .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 22:31 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
2вадя Да я сам из-за Нуфа уже извилину свою покривил всю. Синхронно, несинхронно, млин. Чепуха какая-то. Пусть теперь объясняет :) Вообще я думаю (все, что я пишу, касается дао, про адо я знаю только его название), что запрос на выборку, селект то бишь, отрабатыватся по умолчанию "А-синхронно", т.е. положил, сколько просят, и не мешай, пока не позовут. А изменение и добавление (упдате и инсерт соответственно) стараются отработаться сразу, "Синхронно" (по-нашему, сделай дело - гуляй смело), и пофиг им, что кто-то чего-то там хочет еще сказать. Это все если по умолчанию и на локальной машине. Если на другой, на сервере там, или еще где, то все становится понятным. Он работает, а ты смотришь, пока он флажок Executing не выставит. А вот на локалке... Но про упдаты я уже сегодня смотреть не буду - что я, дурак что-ли, завтра опять с расстройства квасить?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 22:46 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Geo, наш диалог, имхо, перешел во вторую стадию - стадию тестов. Я терминологией определились, с общими принципами организации ВИНДОЙ многозодачности - тоже, осталось разобраться с Аксом :) Результаты твоих тестов показались странными, поэтому пока объяснить ничего не могу. Т.е. у меня никогда не получалось в OnOpen увидеть одну запись (твой второй тест, где результат - 1). Буду пробовать еще раз. На счет "буду пробовать" и "стадия тестов"... К сожалению не сегодня... С работы сразу в гараж (внеплановый ремонт машины собственными силами), а сейчас уже тоже уезжаю - комп доступен не будет. Надеюсь завтра провести ряд тестов и продолжить тему. ======= Виктор, на счет DoEvents во "нужных местах" согласен на все 100%, вот только в большинстве случаев такие нужные места находятся методом тыка или подсознательных предположений, что, дескать, не помешало бы тут ДуЭвентс влепить (тупые долгоиграющие циклы не в счет). Вот и хочется перейти с подсознательного использования на абсолютно осознанное :) Тем более, что мне за это не платят На счет примера с mdb спасибо! Получилось в тему топка, ну то есть в контексте означенной в самом первом посте топика задачи. Учтем... ======= Вадя, на счет " а что делает акс когда пишет Обработка команды...? " думаю из разряда "фик его знает", тем более, что наверняка делает разные вещи - без тестов не обойтись ;) //пытается втянуть в начинающуюся авантюру с тестированием еще одного участника :) Т.е. тестировать, тестировать и еще раз тестировать! Хотя, я тут вспомнил один прикол на эту тему - сегодня повспоминаю все тонкости, а завтра сформулировать и выложить. Но ты тоже не сиди "без дела" (в решении данного вопроса) - составь список всех (интересных тебе) команд, которые заставляют акс писать такие гадкие вещи :) ======== Sfagnum, не прячься! Се равно мы знаем, что ты сюда заглядуешь и даже идеи для общего дела тыриш Т.е. я к тому, что вместо ФАКа отвечу тебе здесь... Я не против того, чтобы дальше описать всё то, что наобещал там, но, во-первых краткие выжымки-ответы уже доступны в этом топике, а во-вторых моя уверенность пошатнулась :) Видиш ли, пришел Гео, начал задавать провокационные вопросы и почва под ногами начала плавать Т.е. мне необходимо время, чтобы еще всё разок протестировать и убедиться, что всё что я знаю - верно. Всем удачи! //ушел... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 20:30 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
2Нуф-Нуф Если честно, на mdb я ничего подобного не использовал (кроме "тупых циклов" - что получалось достаточно симпатично: грузиться журнал, а спрогой можно работать (в т.ч. и с журналом)) На Adp - другое дело: Открыл Connect как "асинхронный" и все теперь чудестным образом (спасибо фее Билли) открываеться асинхронно. А клиент теперь может благополучно и скончаться, не дожидаясь ответа сервера (или нет? надо проверить (фее могла и на ср%ть), но у меня че-то 10-минутных задач не попадалось) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 21:41 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Уфф... Все сделал. Решил перед отходом ко сну перечитать, что ты сегодня написал, и обратил внимание на определились с общими принципами организации ВИНДОЙ многозодачности Уже? Ты куда торопишься? ;) А про отсутствующую 11-ю секунду, из-за которой шум-гам? Или спишем ее на акцес или же jet? Блин, сейчас сделаю тест по варианту ЛП... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 03:07 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
2Нуф-Нуф Не совсем по варианту ЛП, но похоже. Та же мдб-шка "все-в-одном", две идентичных таблицы t и t1 Процедура № 1 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Процедура № 2 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Вспомогательная Код: plaintext 1. 2. Каждую из процедур запускал по 5 раз с и без аргумента dbRunAsync. Вот: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Итак. Во время цикла явно "что-то происходит". Аргумент dbRunAsync явно на что-то влияет, хотя и не должен. Причем по-разному. Все. Если ты это не объяснишь, то я больше никогда... Никогда(!) не буду даже думать про эти дурацкие запросы. Только спать мешают :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 04:17 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Да, я не написал, что во всех четырех случаях печатались такие результаты: после открытия рекордсетов: nnn мс. Rs: 1 rs1 1 после rs.moveLast: nnn мс. Rs: 229376 rs1 1 после rs1.movelast: nnn мс. Rs: 229376 rs1 229376 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 04:31 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
ЛП писал:"dbRunAsync Runs an asynchronous query ( ODBCDirect workspaces only )."а у меня: "Executes the query asynchronously (ODBCDirect Connection and QueryDef objects only)." Правда у меня Access'97 Geo писал:я тебе, конечно, верюНу ребяты прям Королёва с Тарзаном млин... :) Нуф-Нуф писал:Sfagnum, не прячься!Внимательно наблюдаю, но как Му-му. Geo писал:Итак. Во время цикла явно "что-то происходит". Аргумент dbRunAsync явно на что-то влияет, хотя и не должен. Почему не должен??? а на хрена он тогда??? Geo писал:Причем по-разному.2 раза в одну и ту же реку не войти...(смысл высказавания какого то древнего мудреца) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 11:03 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
а у меня: "Executes the query asynchronously (ODBCDirect Connection and QueryDef objects only)." Правда у меня Access'97 А у меня тоже аксес 97-й есть. Но русский. "dbRunAsync Асинхронное выполнение запроса (только для объектов Connection и QueryDef в рабочей области ODBCDirect)" Учи английский, Мох! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 11:30 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
учись цитировать хорошо переносящий обрезание причём с двух сторон... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 13:32 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
не понял... у тя что хелп переводной под Access'97? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 14:14 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
В смысле? Аксес 97 - русский, и хелп к нему не чукотский аднака. В тоже русском ХР - как ни странно фифти (русский) - фифти (чукотский) - фифти (вапсче нет). Что то много фифтей получилось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 14:17 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
А, я понял. Ты наверное DAO обновлял (сервиспачил). Поставил аглицкий DAO с аглицким же хелпом. Было когда-то такое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 14:23 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Да нет всегда был аглицкий, не люблю русифицированный софт... да и не дают :) Вышли, если не жалко, эти файлы, мыло в профиле "C:\Program Files\Microsoft Office\Office\ACMAIN80.HLP" "C:\WINDOWS\SYSTEM\JETSQL35.HLP" если есть хлп к более позднему Jet'у тоже буду рад ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 14:29 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Ок, вечером пошлю. Хелпа к более позднему - нихт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 14:45 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Пасибки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 15:17 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Geo, кроме того, что уже говорил добавить нечего... Во-первых, разница в 15 сотых секунды слишком мала, чтобы делать по ней выводы в условиях многозадачной среды... Во-вторых, ни в одном из твоих последних тестов опять нет "параллельности" - запросы может быть и асинхронно запускаются, но не выполняются параллельно коду. Самое интересное я не увидел: Код: plaintext 1. 2. 3. 4. 5. Для того, чтобы увидеть всё же параллельное выполнение (без кавычек) добавь в цикл DoEvents и еще разок запусти... На выходе из цикла количество записей в рекордсете должно быть больше 1... С DAO не эксперементировал, но с ADO именно так и было. И вот теперь, когда мы добились настоящей параллельности замеряй время выполнения. "11-я секунда" тебе гарантированна. Но это так... Отмазки... Как-нибудь найду время и силы, свояю базку с всеми необходимыми и что-либо объясняющими тестами, выложу ее где-нибудь и обязательно вернусь к данной теме... А пока... Пока можно считать, что твои тесты остались без комментариев с моей стороны и ты теперь можешь спать спокойно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2003, 23:01 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32266130&tid=1679374]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 413ms |

| 0 / 0 |
