Python VM içinde mi çalışıyor?

---
Quis custodiet ipsos custodes?


07 Ocak 2010 18:19 tarihinde anıl özselgin <[email protected]> yazdı:

> Beyler python kodu 10000'e (yazıyla onbin) kadar asalları bulurken, php
> 100000'e (yazıyla yüzbin) kadar asalları buluyor.
>
> Biliyorsunuz python virtual machine üzerinde çalışıyor fakat php direk
> olarak C extension'larını çağırarak hesaplamaları yaptırıyor. Dolayısıyla
> php biraz daha iyi performans gösterir.
>
> Kodları optimize ederek tekrar yazdım, asal sayı bulurken sayıyı
> karekökünden yukarıdaki sayılara bölmek anlamsız olduğu için bu kontrolleri
> ekledim. Sonuçları  aşağıda görebilirsiniz, php dediğim nedenlerden ötürü
> biraz daha hızlı.
>
> an...@db05:~/public_html/sahi$ time php test.php
> 78498
> real    0m35.846s
> user    0m35.790s
> sys     0m0.060s
>
> an...@db05:~/public_html/sahi$ time python test.py
> 78498
> real    0m39.011s
> user    0m38.980s
> sys     0m0.030s
> an...@db05:~/public_html/sahi$
>
> ###########################################
>
> <?php
> $primeNumbers = array();
>
> for ($i = 2; $i < 1000000; $i++)
> {
>     $divisible = false;
>     $sqrt = sqrt($i);
>     foreach ($primeNumbers as $number)
>     {
>         if ($number > $sqrt ){
>                 break;
>         }
>         elseif ($i % $number == 0)
>         {
>             $divisible = true;
>          }
>     }
>
>     if ($divisible == false)
>     {
>         $primeNumbers[] = $i;
>     }
> }
>
> echo sizeof($primeNumbers);
>
> ?>
>
>
>
> #########################################
>
>
> #!/usr/bin/python
> # -*- coding: utf-8 -*-
> import math
> primeNumbers = []
>
> for i in range(2, 1000000):
>     divisible = False
>     sqrt = math.sqrt(i)
>
>     for number in primeNumbers:
>         if sqrt < number:
>             break
>         if i % number == 0:
>             divisible = True
>
>     if divisible == False:
>         primeNumbers.append(i)
>
> print str(len(primeNumbers))
>
>
>
>
>
>
>
> 07 Aralık 2009 02:36 tarihinde aşkın yollu <[email protected]> yazdı:
>
>>
>>
>> 2009/12/7 aşkın yollu <[email protected]>
>>
>>
>>>
>>> 2009/12/6 Ozgur Batur <[email protected]>
>>>
>>> Threadlerin başlıkları farklı devam ettiği için Barış beyin attığı
>>>> düzeltmeyi görmemişim. Python scriptinde range 10000 değil 100000
>>>> olacak, denerken ben de dikkat etmemişim. Düzeltme ile:
>>>>
>>>> python test.py:
>>>> Başlangıç = 1260123258.11
>>>> Bitiş = 1260123340.4
>>>> Süre =~82.29
>>>>
>>>> Php %50 olamasa da %35 daha hızlı çıktı, nedeni diğer threadde
>>>> tartışılan konular olabilir. time konusunda haklısınız, programın
>>>> içinden ölçmekten çok daha sağlıklı olacaktır.
>>>>
>>>> 2009/12/6 Mehmet Salih YILDIRIM <[email protected]>:
>>>> > Bu kadar fark olmaması lazım bence. Yorumlayıcıların yaptıkları
>>>> > optimizasyonları bilmediğimden kesin birşey diyemeyeceğim ancak,
>>>> > fiziksel zamanı ölçmek yerine cputime değerine bakmak lazım gelir. Şu
>>>> an
>>>> > yaptığınız işlemde preemption dolayısı ile eşzamanlı çalışan diğer
>>>> > process ler de çalışma süresini etkilerler. Ama bir process'in cpu
>>>> > üzerinde ne kadar süre running durumunda kaldığı tam olarak
>>>> > karşılaştırılabilecek veridir. Bu yüzden bu şekilde karşılaştırmak
>>>> yerine
>>>> >
>>>> > "time python test.py" komutu ile "time php test.php" komutlarını
>>>> kullanınız.
>>>> >
>>>> > Ozgur Batur wrote:
>>>> >> Merhaba,
>>>> >>
>>>> >> Pazar akşamı yapacak bir işim yok :)
>>>> >> Scriptleri birebir denedim:
>>>> >>
>>>> >> python test.py:
>>>> >> Başlangıç = 1260120673.71
>>>> >> Bitiş = 1260120674.85
>>>> >> Süre =~1.14
>>>> >>
>>>> >> php test.php:
>>>> >> Başlangıç = 1260120770.21
>>>> >> Bitiş = 1260120831.07
>>>> >> Süre = ~60.86
>>>> >>
>>>> >> Kullandığım python sürümü: 2.6.4rc2
>>>> >> Php sürümü: PHP 5.2.10-2ubuntu6.3 with Suhosin-Patch 0.9.7 (cli),
>>>> Zend
>>>> >> Engine v2.2.0
>>>> >>
>>>> >> Sonuç python phpden yaklaşık 53 kat daha hızlı çıktı. Üstelik
>>>> >> verdiğiniz python scriptinde output ekrana basılmasına rağmen php
>>>> >> scriptinde echo kapalı. Ya bilmediğim çok hızlı bir php yorumlayıcı
>>>> >> kullanıyorsunuz, ya da yapılandırmanızda bir problem var.
>>>> >>
>>>> >> İyi günler,
>>>> >>
>>>> >> 2009/12/5 Baris <[email protected]>:
>>>> >>
>>>> >>> Merhaba arkadaşlar bu sabah çok ilginç bir durum ile karşılaştım
>>>> mod_python
>>>> >>> ile ile ilgili internette gelişmelere bakarken, şöyle iki kod
>>>> parçacığı
>>>> >>> gözüme takıldı, konsoldan calıştırılan ve 2 ile 100000 arası asal
>>>> sayıları
>>>> >>> bulamak üzere yazılmış python betiği, yine aynı amaç için yazılmış
>>>> php
>>>> >>> betiğinden %50 daha yavaş çalışmakta olduğunu sınadım. Nedenini
>>>> >>> açıklayabilecek arkadaşlar açıklamada bulunabilirse sevinirim.
>>>> >>>
>>>> >>> Python için;
>>>> >>>
>>>> >>> #!/usr/bin/python
>>>> >>> # -*- coding: utf-8 -*-
>>>> >>> import time
>>>> >>> print time.time()
>>>> >>> primeNumbers = []
>>>> >>> output = []
>>>> >>>
>>>> >>> for i in range(2, 10000):
>>>> >>>     divisible = False
>>>> >>>     for number in primeNumbers:
>>>> >>>         if i % number == 0:
>>>> >>>             divisible = True
>>>> >>>
>>>> >>>     if divisible == False:
>>>> >>>         primeNumbers.append(i)
>>>> >>>         output.append(str(i))
>>>> >>>
>>>> >>> print ' '.join(output)
>>>> >>>
>>>> >>> print time.time()
>>>> >>>
>>>> >>> ----------------------------------------
>>>> >>>
>>>> >>> Php için:
>>>> >>>
>>>> >>> <?php
>>>> >>> echo microtime(true) ."\n";
>>>> >>> $primeNumbers = array();
>>>> >>> $output = '';
>>>> >>>
>>>> >>> for ($i = 2; $i < 100000; $i++)
>>>> >>> {
>>>> >>>     $divisible = false;
>>>> >>>     foreach ($primeNumbers as $number)
>>>> >>>     {
>>>> >>>         if ($i % $number == 0)
>>>> >>>         {
>>>> >>>             $divisible = true;
>>>> >>>         }
>>>> >>>     }
>>>> >>>
>>>> >>>     if ($divisible == false)
>>>> >>>     {
>>>> >>>         $primeNumbers[] = $i;
>>>> >>>         $output .= $i;
>>>> >>>     }
>>>> >>> }
>>>> >>>
>>>> >>> #echo $output;
>>>> >>> echo "\n" . microtime(true) ."\n";
>>>> >>> ?>
>>>>
>>>
>>> Bende daha ilginç bi durum var, python kısa bir sürede tamamlarken, php
>>> çook uzun sürüyor, henüz php betiğinin tamamlandığını daha görmedim.
>>> Yapılandırmayla ilgili sorunlar olabilir.
>>>
>>> Bu arada kodların biraz iyileştirmeye ihtiyacı var :)
>>>
>>>
>> Sonunda bitti :)
>>
>> time php -f asal.php
>> real    3m36.432s
>> user    3m30.674s
>> sys     0m0.520s
>>
>> time python asal.py
>> real    0m3.681s
>> user    0m3.628s
>> sys     0m0.008s
>>
>> Python yaklaşık 70 kat daha hızlı çalıştı.
>>
>>
>> --
>> Aşkın Yollu
>> http://askin.ws
>>
>> _______________________________________________
>> Linux-programlama mailing list
>> [email protected]
>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>>
>>
>
>
> --
> Anıl Özselgin
> http://negaripseylervarya.blogspot.com/
>
> _______________________________________________
> Linux-programlama mailing list
> [email protected]
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>
>
_______________________________________________
Linux-programlama mailing list
[email protected]
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap