Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: О скорости работы при сравнении массивов

Сообщения:  [1-10]    [11-20]  [21-22] 

 
 автор: Valleri   (25.06.2011 в 19:55)   письмо автору
 
   для: cheops   (25.06.2011 в 18:41)
 

С данными все сделано. Данные под носом и сами просятся. А вот как ОС какую ОС, как настроить ОС, что в первую очередь с ОС сделать? ЧТо еще с ОС можно сделать

Еще не терпится написать, что 1с8.0... раз в 1000 медленней, а то и больше.
Самая страшно тормозная база. Еcть ли еще такие ? Чемпион среди тормозов

  Ответить  
 
 автор: cheops   (25.06.2011 в 18:41)   письмо автору
 
   для: Valleri   (25.06.2011 в 16:59)
 

>Локально-Денвер или PhpEd
>Удаленно- сервер, не удобно
Вот это немного и смущает, 1 час - это показатель на сервере? Сервер это очень отличная от обычного персонального компьютера машина, там и количество шин зачастую не 1 и процессоры стоят помощнее и стоимостью с персоналку и вообще для сервера в несколько раз обставить персональный компьютер - в порядке вещей.

>Хочу Оптимизировать Windows, горит. КАК ?
В первую очередь откажитесь от Apache (Denwer) и от браузеров - запускайте скрипт отдельно от них. Хотите скорости - убирайте посредников между программой и скриптом. Кроме того, установите высокий приоритет скрипту в диспетчере задач.
Во вторую очередь информацию в файлах нужно отсортировать и хранить в отсортированном виде (особенно если будете писать свою программу на Cи - все эффективные алгоритмы основаны на предположении, что массивы отсортированы). Хорошо бы отказаться от ассоциативного массива, и оперировать обычным массивом (даже если их будет два - для ключей и значений). Хорошо бы для каждого отсортированного массива создать массив количества символов в строках и сравнивать сначала эти два массива - это будут чисто числовые массивы, сравнение которых будет гораздо быстрее, чем строковых массивов. Обязательно проконтролируйте количество памяти, которое берет скрипт, тем более это не сложно, есть специальная функция memory_get_usage(). Важно установить умещается ли ваш скрипт в памяти или нет - если он сбрасывается на жесткий диск - можно ждать еще дольше (на серверах подсистема ввода-вывода быстрее и часто обслуживается отдельной шиной).

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

В общем суть всех ускорений - в подготовке данных, я не думаю, что получится оптимизировать Windows-версию PHP (если бы это было просто - давно бы без нас с вами сделали). А C-версия будет зависеть только от потребляемой памяти и скорости загрузки данных. В любом случае, если данные чуть-чуть подготовить - можно здорово выиграть в скорости.

  Ответить  
 
 автор: Valleri   (25.06.2011 в 16:59)   письмо автору
 
   для: cheops   (25.06.2011 в 14:33)
 

>А что делает скрипт?
array_diff().
Именно эта функция выполняется несколько часов.
Абстрактный пример:Если поиск одного элемента множества в данных другого множества занимает 1 сек, то сколько времени потребуется сравнивать два множества по1 млн.
Компьютеры одинаковые. Linux на сервере?

>м... так, а сколько у вас элементов в массиве и сколько памяти используется скриптом для этой операции?
1. От 300 000
2. -1

>Вы из под Apache запускаете PHP или речь идет о консольном запуске скрипта?
Локально-Денвер или PhpEd
Удаленно- сервер, не удобно

> И откуда извелкаются данные для этой операции (файл, база данных, сеть)?
Файлы переноса данных

>Вообще, когда речь заходит о задачах выполняющихся несколько часов, лучше действительно отказываться от PHP (собственно, вы я так понял уже сами пришли к этой мысли).
Сначала отказался от VB, 1c и других интерпретаторов.
интересы направились в компиляторы, MSDOS, Linux и пр.

Хочу Оптимизировать Windows, горит. КАК ?
Хочу попробовать Си.

  Ответить  
 
 автор: cheops   (25.06.2011 в 14:33)   письмо автору
 
   для: Valleri   (25.06.2011 в 12:26)
 

Хм... так, а сколько у вас элементов в массиве и сколько памяти используется скриптом для этой операции?

PS Вы из под Apache запускаете PHP или речь идет о консольном запуске скрипта? И откуда извелкаются данные для этой операции (файл, база данных, сеть)?
PPS Вообще, когда речь заходит о задачах выполняющихся несколько часов, лучше действительно отказываться от PHP (собственно, вы я так понял уже сами пришли к этой мысли).

  Ответить  
 
 автор: Valleri   (25.06.2011 в 12:26)   письмо автору
 
   для: cheops   (25.06.2011 в 12:21)
 

array_diff().
Именно эта функция выполняется несколько часов.
Абстрактный пример:Если поиск одного элемента множества в данных другого множества занимает 1 сек, то сколько времени потребуется сравнивать два множества по1 млн.

  Ответить  
 
 автор: cheops   (25.06.2011 в 12:21)   письмо автору
 
   для: Valleri   (25.06.2011 в 12:05)
 

А что делает скрипт? Т.е. на что он тратит основное время - база данных, вычисление, обращение к диску, обращение к сети?

PS Правильно ли я понимаю, что скрипт работает на протяжении часов?

  Ответить  
 
 автор: Valleri   (25.06.2011 в 12:05)   письмо автору
 
   для: cheops   (25.06.2011 в 09:46)
 

Компьютеры одинаковые. Linux на сервере?
Но как повысить скорость.
Даже 10 кратное ощутимо(вместо 10 часов 1 час)

  Ответить  
 
 автор: cheops   (25.06.2011 в 09:46)   письмо автору
 
   для: Valleri   (25.06.2011 в 03:02)
 

Хм... 10 раз многова-то. А что скрипт делает? И главное где расположены Windows и Linux (последний часом не на сервере?).

  Ответить  
 
 автор: Valleri   (25.06.2011 в 03:02)   письмо автору
 
   для: cheops   (24.06.2011 в 18:25)
 

Интересно.
У меня скрипт под под Linux в 10 раз быстрее, на под Windows.
Как можно поднять быстродействие в Windows. Можно сделать выше чем под Linux.

  Ответить  
 
 автор: cheops   (24.06.2011 в 18:25)   письмо автору
 
   для: Valleri   (24.06.2011 в 17:33)
 

В Windows вы не можете напрямую работать с устройствами, только через драйвера (что разумеется медленнее), именно поэтому когда был утерен прямой контроль над видео-памятью, игры долго разрабатывали под DOS. С внедрением DirectX ситуация изменилась. В общем можно создать библиотеку поиска, которая будет очень шустро работать с устройствами под Windows. Причем не обязательно через DDK, дело в том, что в Windows поиск какой-то кривой - судя по всему через одно место сделан и здорово в обход, так как даже другие программы под Windows помоему пошустрее ищут.

>Или то, что под денвером (Windows) те же скрипты медленнее, чем под Linux
Тут не очень корректно сравнивать, так как скрипты выполняются библиотекой, которая сама подключается к Apache, который для Windows и Linux реализованы по разному, вплоть до того, что в Windows работают потоки, а в Linux - процессы. В общем, тут не совсем корректно сравнивать, лучше запускать чистые консольные программы - тут более объективное сравнение может получиться. Вообще если сильно копать, то мы скатимся к Windows API и системным вызовам UNIX. Ни на том, ни на другом кросс-платформенные вещи стараются не создавать - умучаешься сопровождать разные версии, пользуются стандартными библиотеками, которые в свою очередь используют либо Windows API и системные вызовы. Однако, оптимизируя код, вы вольны не только использовать системные функции, но перерабатывать бинарные файлы. Можно так оптимизировать exe-файл при помощи ассемблера, что она съест все ресурсы машины, у вас Windows работать перестанет на время работы этой программы. Когда мы на слабых машинах считали вещи предназначенные для суперкомпьютеров, мы пользовались именно такими программами на стероидах (ассеблерных вставках) - это потрясающее зрелище - она высасывала из машины все, я больше никогда не видел, чтобы персоналка так выкладывалась. Обычные программы которые вы видите, занимают на два порядка больше места, чем могли бы занимать и выполняются на два порядка медленнее, чем могли бы. Это не из-за лени или небрежности - так дешевле и надежнее. Типичные PHP-скрипты можно ускорить и на 3 и на 4 порядка.

Кроме того, Windows графическая среда. Видели вероятно настройку - ускорить фоновые задачи или пользовательские? Что выбирали в ней? А в диспетчере задач какой приоритет у Apache и PHP-файла? Windows прикладывает огромные усилия, чтобы одна задача не забрала под себя все ресурсы - когда нужно сосредоточить все ресурсы машины на этой задаче, да, в Linux этого добиться проще. Это не значит, что этого нельзя добиться в Windows - просто телодвижений нужно делать больше и хорошо знать устройство Windows.

>Или то, что под денвером (Windows) те же скрипты медленнее, чем под Linux
Т.е. мы берем предкомпилированные программы и операционные системы в режиме i386, т.е. для процессора 25 летней давности, берем программы, перенесенные из одной операционной системы в другую и никогда под эту операционную систему не оптимизировавшиеся. Начинаем сравнивать скорости библиотек - которые тоже не опимизировались - перенести бы, чтобы сбоев не было... Тут даже не заходит речь о том, чтобы использовать режим i586 или более серьезные возможности современных процессоров. Мы не смотрим, какого мусора компилятор насовал в исполняемый файл - работает и ладно. Тут до реальных преимуществ операционной системы и процессоров очень далеко - много очень посредников. А у создателей этих посредников очень разные цели и почти ни у кого первоочередной целью не выступает скорость.

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-22] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования