Bu arada ben kodları bir milyona kadar olan asalları bulacak şekilde
değiştirdim.

07 Ocak 2010 18:20 tarihinde Alper KANAT <[email protected]> yazdı:

> 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
>
>


-- 
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

Cevap