1. PHP / Говнокод #4096

    +172

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    <?php 
    
    $strings = array(); 
    
    $strings[] = "10_strings_0"; 
    $strings[] = "10_strings_1x"; 
    $strings[] = "10_strings_2"; 
    $strings[] = "10_strings_3"; 
    $strings[] = "10_strings_4x"; 
    $strings[] = "10_strings_5x"; 
    $strings[] = "10_strings_6"; 
    $strings[] = "10_strings_7x"; 
    $strings[] = "10_strings_8"; 
    $strings[] = "10_strings_9"; 
    
    // СПИСОК СТРОК ИЗ 100 СТРОК В КОТОРЫХ БУДЕТ ОСУЩЕСТВЛЯТЬСЯ ПОИСК СТРОК ИЗ СПИСКА $strings 
    
        for ($counter=0; $counter<100; $counter++) 
        { 
            $check_strings[] = "10_strings_".$counter; 
        } 
    
    // Временная папка - папка со скриптом 
    
        // создание vbs файлов 
        for ($strings_c=0; $strings_c<sizeof($strings); $strings_c++) 
        { 
            $file = fopen($strings[$strings_c].'.vbs', 'w'); 
                fwrite($file, 'Set Program = Wscript.CreateObject("Wscript.Shell")'.PHP_EOL.'Program.Run("'.$strings[$strings_c].'.bat'.'")'.PHP_EOL.'Wscript.Quit'); 
                fclose($file); 
        } 
    
        // создание bat файлов 
    
    $interpreter_root = 'C:\xampp\php\php.exe'; // путь к PHP интерпретатору 
        for ($strings_c=0; $strings_c<sizeof($strings); $strings_c++) 
        { 
            $file = fopen($strings[$strings_c].'.bat', 'w'); 
            fwrite($file, $interpreter_root.' '.$strings[$strings_c].'.php'); 
            fclose($file); 
        } 
    
    // создание php файлов 
    for ($strings_c=0; $strings_c<sizeof($strings); $strings_c++)   { 
    $code = '<?php 
    $string = \''.$strings[$strings_c].'\'; // строка для проверки, в каждом экземпляре своя 
        for ($counter=0; $counter<100; $counter++) 
        { 
            $check_strings[] = "10_strings_".$counter; 
        } 
    
        shuffle($check_strings); 
    
        $ok = false; 
    
        for ($check_strings_c=0; $check_strings_c<sizeof($check_strings); $check_strings_c++) 
        { 
            if ($string == $check_strings[$check_strings_c]) 
            { 
                $ok = true; 
                break; 
            } 
        } 
    
        if ($ok == true) 
        { 
            $file = fopen("'.$strings[$strings_c].'_ok.txt", "w"); 
            fclose($file); 
        } 
    ?>'; 
    
    $file = fopen($strings[$strings_c].'.php', 'w'); 
    fwrite($file, $code);

    многопоточность на PHP

    Запостил: exciter, 25 Августа 2010

    Комментарии (99) RSS

    • // создание vbs файлов
      // создание bat файлов
      // создание php файлов

      даешь, млять, кодогенерацию!
      убейте кто-нибудь автора шыдевра
      Ответить
      • показать все, что скрытоэтот "шыдевр" всего лишь быстрая иллюстрация, для того чтобы показать принципиальную возможность многопоточности на PHP реализованную с помощью операционной системы (bat и vbs файлы)
        Ответить
        • прикинь, а еще можно параморфизы на ассемблере ваять и гланды через анус вполне можно удалить
          удивительно, но так никто не поступает - парадокс?
          Ответить
          • в каком то смысле ты прав, но если речь идёт о переписывании десятков скриптов и библиотек которые связаны между собой, только лишь потому что нужна многопоточность в каком-то скрипте, то уж лучше так

            кстати програмист тем и отличается от кодера, что пытается выйти за рамки документированных возможностей
            Ответить
            • нет, программист отличается от кодера, возомнившего себя программистом, тем, что адекватно выбирает инструмент под задачу, а не лепит тонну бойлерплейта

              >кстати програмист тем и отличается от кодера, что пытается выйти за рамки документированных возможностей
              за такое потом очень больно бьют, ты пока этого не осознаешь, ввиду никакого опыта, но лучше сразу отвыкай.
              Ответить
              • ну если речь идёт о больших корпоративных проектах, то стандарты и унификация процесса разработки рулит, это да ... но код предназначен как демонстрация одного из путей ... для обычных юзеров
                Ответить
            • >>кстати програмист тем и отличается от кодера, что пытается выйти за рамки документированных возможностей

              Кстати я думаю что наоборот. Хороший программист выбирает технологию под задачу, а кодер старается решить задачу на единственной, известной ему технологии.
              Ответить
              • но выйдя за рамки этой технологии програмист должен постараться найти решение за счёт более глубокого изучения технологии которую он использует
                Ответить
                • Если технология это позволяет.
                  Впринципе, можно и шурупы стамеской забивать. Но это -- хреновое решение.

                  PHP разрабатывался как средство быстрого построения веб-страничек. В нем нет многопоточности, потому что среднее время жизни PHP скрипта -- меньше секунды.

                  Если бы Вы писали на джаве или .net например, то Вам бы не пришлось юзать внешние сервисы, трогать операционку и делать другие странные вещи. Вы бы просто создали объект, вызвали у него метод, и Ваш код стал бы работать в несколько потоков))
                  Ответить
                  • доказывать что этот способ лучший я не стану (очевидно то нет), скажу лишь что он подходит для моих требований, одним из которых было избежать глобального переустройства моих скриптов или тем более переписывании всего ранее созданного с использованием абсолютно новых технологий (на изучение которых придётся затратить определённое время)
                    Ответить
        • Вы видимо не понимаете значения слова "многопоточность".

          К возможности запуска внешних процессов (который есть почти в любом языке, включая .bat файлы) оно отношения не имеет
          Ответить
          • связка bat-vbs файлов не больше чем способ запустить дочерние php процессы

            почему это не имеет отношения к многозадачности (локальное распаралеливание) если скорость программ реально увеличивается в разы ?
            Ответить
            • многопоточность != многозадачность.

              если в краце -- в одном процессе работает N потоков. У них общая куча, но разный стек. В каждом процессе есть как минимум 1 поток.
              Когда в одном процессе работает несколько потоков -- это и называется многопоточностью.

              Запуск N процессов не есть многопоточность.

              А многозадачностью называют умение операционки (и процессора) запускать несколько задач, и переключатся между ними так, что бы пользователь думал что они выполняются постоянно.

              Ключевые слова: thread
              Ответить
              • ясно, спасибо за объяснения

                короче я говорю о возможности ускорить работу программы за счёт одновременного выполнения простых преобразований

                как это правильно назвать ?
                Ответить
                • Так и назвать "нескольких процессов из PHP"
                  А зачем так сложно? Скрипт-хост, .batник...

                  В пыхе обычного fork нету что ли?

                  Кстати, что такое "простые преобразования"? Это какой-то термин из вышки?
                  Ответить
                  • > В пыхе обычного fork нету что ли?
                    > .batник...
                    ну ты понел какая ось =)
                    Ответить
                    • ну fork вполне может быть и на винде, просто он будет оберткой для CreateProcess
                      Ответить
                      • ты наверно не знаешь, что такое форк
                        это не просто запуск процесса, а создание его точной копии
                        Ответить
                        • да, через CreateProcess это правда не сделать))
                          Вы правы
                          Ответить
                          • не настолько интересно чтобы проверять, но теоретически возможно (родитель получает хендл дитя с правами PROCESS_ALL_ACCESS, свои адреса знаем, WriteProcessMemory, Profit)
                            Ответить
                  • bat и vbs файлы это способ рещить задачу а не спортивная цель
                    Ответить
                  • вроде как есть
                    http://netfaq.ru/php/php_pcntl_fork
                    Ответить
                    • вроде как надо смотреть для каких осей оно есть
                      Fatal error: Call to undefined function pcntl_fork()
                      Ответить
                      • "Process Control support in PHP is not enabled by default. You have to compile the CGI or CLI version of PHP with --enable-pcntl configuration option when compiling PHP to enable Process Control support.
                        Note:
                        Currently, this module will not function on non-Unix platforms (Windows)."

                        кто бы сомневался)

                        Ваще-то на винде есть кусочек подсистемы posix (может там и fork есть), но так как с подсистема может быть только одна, а без win32api трудно что либо написать -- под posix не пишут на виндах.
                        Ответить
                    • http://ru2.php.net/manual/en/pcntl.installation.php
                      Ответить
    • Создание рнр файлов на рнр — это пяДь!
      Даёшь генератор говнокода!
      Ответить
      • php файл который генерируется в коде, является програмным примитивом который реализует простую функцию (в данном случае поиск строки в списке других строк)

        связка (основной php скрипт)-bat-vbs-(дочерний php скрипт) позволяет запустить n потоков, каждый из которых будет выполнять простое действие, ввиду одновременности их исполнения, имеем реальный прирост поизводительности
        Ответить
      • Это мета-программирование
        Ответить
    • велик и могуч hypertext preprocessor
      Ответить
    • 0x1000 гет получил былинный отказ
      Ответить
    • Дальше комментария в 16 строке читать не смог. Съехал под стол.

      Список строк из 100 строк, в которых строки являются строками, в которых построчно ищутся строки из списка строк в строковом представлении строчными буквами.
      Ответить
      • http://img.baltgames.lv/v2/usergalleries/141115.jpg одобряэ =)
        Ответить
      • прежде чем коментировать в таком духе ознакомься с продолжением кода

        .....................

        fclose($file);
        }

        // запуск потоков

        for ($strings_c=0; $strings_c<sizeof($strings); $strings_c++)
        {
        exec($strings[$strings_c].'.vbs');

        sleep(1);

        @unlink($strings[$strings_c].'.php');

        @unlink($strings[$strings_c].'.vbs');

        @unlink($strings[$strings_c].'.bat');
        }

        // далее идёт обработка текстовых файлов с именами 10_strings_9_ok наличие котрых говорит о том что например строка 10_strings_9 найдена в списке строк из ста трок (см. выше)

        // в текстовых файлах можно возвращать текстовые данные которые будут парсится основным скриптом и использоваться для дадьнейшей работы

        ?>
        Ответить
        • так это ты аффтар??
          ой как все запущено..
          Ответить
          • подъёбка ? или серьёзно ? если серьёзно то слушаю внимательно конструктивную критику
            Ответить
            • да какие тут подъебки могут быть
              ппц начинается от того, что никакие это не 'потоки' (threads? сраная рашкинская терминология) и заканчивается слипами (нах?) и засобачеными операторами.
              Ответить
              • я про терминологию спорить не буду

                задача была поставлена, задача решена

                согласен что на других языках решение более красивое, но для моих задач подходит ... поэтому я просто поделился своим решением (на другом форуме (а сюда постил не я))
                Ответить
                • Ну она ведь не решена =\
                  Ответить
                  • задача состояла в том чтобы ускорить работу скриптов в которых некоторые задачи можно выполнять одновременно

                    скрипты работают в разы быстрее
                    Ответить
                    • в комментах стоит "многопоточность" а не "ускорение".
                      что, впрочем, уже обсуждалось.
                      Ответить
                      • терминология ...

                        подскажите, кто знает, какой термин будет в данном случае более правильным ? локальное распаралеливание ?
                        Ответить
    • списки строк они такие списки
      Ответить
    • ахахах вот это удача ) только седня зарегался чтобы запостить ЭТО.
      Ответить
    • показать все, что скрытоДанный код (с продолжением выше) был создан для того чтобы показать как ещё может быть реализована многопоточность на PHP

      > Список строк из 100 строк, в которых строки являются строками, в которых построчно ищутся строки из списка строк в строковом представлении строчными буквами.

      список из десяти строк вверху, которые нужно найти в списке из ста строк (которые создаются в цикле) всего лишь простой задачи, которая поддаётся распралеливанию
      Ответить
    • кросс-платформененько

      а вообще я не верю, что такое бывает
      это чей-то дурной сон
      Ответить
      • >кросс-платформененько
        да?
        C:\xampp\php\php.exe (причем хардкодом)
        Wscript.CreateObject
        BATники
        зачетный кроссплат
        Ответить
        • Собствено использование ActiveX и навело меня на мысль о кросс-платформенности.)))))))
          Ответить
      • а я и не говорил что это кросплатфоменное решение
        Ответить
      • del
        Ответить
    • Кажется никто кроме меня не заметил, что термин "многопоточность" имеет к этому коду такое-же отношение, как и термин "бихевиоризм"
      Ответить
    • все таки провалили 0х1000. позор, процессы потоками обозвали. Кстати, эти процессы еще и общаться друг с другом не могут, так что вообще фтопку
      Ответить
      • хост скрипту дочерние процессы отдают данные с помощью текстовых файлов

        а между собой им зачем общаться ? изначально подразумевается что каждый дочерний процесс выполняют заранее определённую простую функцию, так что зачем им между собой общаться ?
        Ответить
        • если функция ОЧЕНЬ простая, то, может быть, не потребуется. Но зачастую нужно контролировать прогресс работы
          Ответить
      • что такое 0х1000 ?
        Ответить
        • где здесь К.О.? ау?
          Ответить
        • «Ох, тыща»
          Ответить
          • и что это значит ?
            Ответить
            • бля ну это пиздец какой-то твой код тебя полностью оправдывает )
              Ответить
            • то же самое, что и 1000h
              Ответить
            • настолько эпично, что тут двойной фейспалм нужен
              facepalm.010

              и я ж просил не сфейлите http://govnokod.ru/4042#comment43735, так еще и в треде объявился некий programer, который вообще не в курсах, что такое 4096

              кстати интересно кто сгетил 44444 коментарий??

              ЗЫ
              http://gofuckbiz.com/showthread.php?t=17406&page=12
              Ответить
              • >юзеры всяких там питонов ведут себя как сексуальное меньшинство ))))) пытаются веебываться но у них это плохо получается)))))) пхп рулит

                ага. и педалит.

                >делаю потоки форками на пхп и не парюсь, для большинства задач хватает

                потоки(!) форками - ай, малаца

                >(это касается даже своих спамилок)
                спамер детектед

                >конечно есть свои минусы, но зато как удобно и привычно!

                привычный и такой родной кактус

                >питон пытался колупать но это не мое, интерфейс для серверного софта все равно нужно делать на пхп )))

                ололо ниасилил?

                >а про "распространенность" питона на дешевых хостингах и говорить не приходится

                нищеброды отакуэ
                Ответить
                • После такого обычно еще пишут: "я делаю професиональные сайты на php и зарабтываю деньги! а что делаешь ты?"
                  Ответить
              • кажется, это деанон
                qazxcvbnm
                Максим Русланов
                [email protected]
                http://otvet.mail.ru/mail/max91020791/
                http://my.mail.ru/mail/max91020791/
                http://vkontakte.ru/id15156119
                Откуда: Россия, Южный ФО, Ставропольский край, Ставрополь
                Ответить
                • ниугадал ^_^
                  для каждого сайта у меня отдельные ники

                  дальнейшие поиски тут - google.com/search?hl=en&q=qazxcvbnm&lr=eng
                  Ответить
                  • по крайней мере теперь понятно откуда и как "Ниибаца крутые програмеры" попадают на говнокод.
                    Ответить
                    • ну на гоуфаке да, это тоже я

                      по сабжу - а почему никто не оценит нестандартность подхода ? где умиление ?
                      Ответить
                      • умиление от десяти слоев костылей? шутник =)
                        а сколько накладных ресурсов въебывается... странно, как вообще 'ускорение' получил.
                        запили бенчи
                        Ответить
                        • > бенчи
                          http://www.govnokod.ru/4096#comment44574
                          Ответить
                        • уже проверял, прирост скорости в разы
                          Ответить
                          • нет, они в разы медленней
                            proof me wrong

                            (нормальные бенчи - это когда как минимум репрезентативность соблюдена)
                            Ответить
                            • сначала скрипт работал около 4 минут, а когда включил это локальное распаралеливание, то около 1.5 минут (сравнение текстов на уникальность)
                              Ответить
                              • >локальное распаралеливание
                                у тебя еще и глобальное есть?

                                залей на обменник сорцы и исходные данные теста (всего один тест? я же предупредил про репрезентативность).
                                Ответить
                                • та мне пофиг, код выполняет свои функции по крайней мере для моих задач
                                  Ответить
                                  • сделай тысяч сто пятьдесят процессов (для ирлонга это как высморкаться) по своей технологии ® - удивишься высокой скоростью обработки.
                                    Ответить
                                    • и датацентр свой ... а то 150k процессов на одном cpu :-/
                                      Ответить
                                      • просто ты не в теме - процессы эрла /= процессам оси: даже на одноядерной тачке их тысячами можно запускать
                                        Ответить
                                        • да erlang интересный язык, особенно радует параллелизм и отказоустойчивость

                                          только найти бы учебные примеры для простых задач (типа работа с массивами, импорт тектовых файлов, обработка строк, и конечно пример распараллеливания ...)

                                          я php начинал учить сразу с практических задач (опыт програмирования был)
                                          Ответить
                                          • >типа работа с массивами, импорт тектовых файлов, обработка строк

                                            это не типичные для него задачи.

                                            начать лучше с мануала Джо Армстронга, параллельно пробежаться по пи-исчислению/исчислению коммуникационных систем
                                            Ответить
                                            • > это не типичные для него задачи
                                              ну в принципе можно на erlang сравнивать строки или искать вхождения ?
                                              Ответить
                                              • да
                                                Ответить
                                                • xXx_totalwar > сделай тысяч сто пятьдесят процессов ... по своей технологии ®
                                                  programer12345 > работа с массивами, импорт тектовых файлов, обработка строк
                                                  xXx_totalwar > это не типичные для него задачи

                                                  так можно с помощью erlang сравнивать один список строк с другим списком и искать совпадения ?
                                                  и как ? если обработка массивов "нетипичная задача"
                                                  Ответить
                                                  • >так можно с помощью erlang сравнивать

                                                    уже сказал, что можно.

                                                    >"нетипичная задача"

                                                    давай ты на php gui'ёвые проги писать будешь. неудобно? это и есть нетипичное применение языка.
                                                    я же не сказал, что это "принципиально невозможно".
                                                    почитай Армстронга, там все доступно изложено.
                                                    Ответить

    Добавить комментарий