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
