Kirjoittaja Aihe: Nopeuskisa: Perl vastaan Python – voiko olla totta?  (Luettu 10975 kertaa)

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Tuli tutun kanssa kinaa siitä, kumpi on tietyssä kumpaakin kiinnostavassa käytössä nopeampi, hänen suosikkinsa Perl vai minun suosikkini Python. Päätettiin kokeilla.

Rakensin 396 Mt tekstitiedoston. Sen jokaisella rivillä on satunnaisesti 1–80 merkkiä pelkkiä a-kirjaimia. Sitten tehtiin sekä Perlillä että Pythonilla skripti, joka muuttaa säännöllisiä lausekkeita käyttäen jokaisen a-kirjaimen jonoksi ”ööön”. Data luetaan vakiosyötevirrasta. Sitä ei kirjoiteta minnekään, koska tarkoitus oli mitoittaa vain sitä nopeutta, millä dataa luetaan ja muutetaan, ei esim. konsolin vieritysnopeutta.

Kolmiytimisellä pöytäkoneellani konsolitilassa (ei graafisia kilkkeitä takana käynnissä) tulokset olivat time-komennolla mitattuna:

Perl (versio 5.14.2): 2 min 45,29 s
Python (versio 3.2.3):  1 min 12,95 s

Pythonistina uskon kyllä vakaasti, että tuloksen pitikin mennä näin päin, mutta kaveri ei anna periksi enkä minäkään osannut kuvitella ihan noin suurta eroa – onhan Perlkin tunnettu nopeudestaan.

Osaisiko joku sanoa, mikä näissä koodeissa on vialla, ja millainen koe olisi rehellisempi?

Perl-koodi:

Koodia: [Valitse]
#!/usr/bin/perl

while (<>) {
    s/a/ööön/g;
}

Python-koodi:

Koodia: [Valitse]
#!/usr/bin/env python

from sys import stdin
import re

m = re.compile('a')
for line in stdin:
    m.sub('ööön', line)
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #1 : 18.05.12 - klo:22.46 »
Itseäni alkoi kiinnostaa myös minkä tuloksen saisi "sed": in avulla tai pelkällä "bash": llä.
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #2 : 18.05.12 - klo:23.03 »
Itseäni alkoi kiinnostaa myös minkä tuloksen saisi "sed": in avulla tai pelkällä "bash": llä.

sedillä ja bashilla tulos luultavasti olisi pakko kirjoittaa jonnekin. Sinänsä se ei haittaisi, jos panisi Perlin ja Pythoninkin kirjoittamaan tuloksen tiedostoon, jolloin testit olisivat keskenään samat.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #3 : 18.05.12 - klo:23.25 »
Lainaus
sedillä ja bashilla tulos luultavasti olisi pakko kirjoittaa jonnekin.

Eikös hyvä paikka tulosteille olisi /dev/null jos ei halua tallettaa minnekään ?

Koodia: [Valitse]
sed 's/a/öön/g' ./koe.txt >/dev/null
« Viimeksi muokattu: 18.05.12 - klo:23.33 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #4 : 18.05.12 - klo:23.43 »
Okei, kirjoitetaan /dev/nulliin eli uudet Perl- ja Python-koodit ovat:

Koodia: [Valitse]
#!/usr/bin/perl

while (<>) {
    s/a/ööön/g;
    print $_;
}

ja:

Koodia: [Valitse]
#!/usr/bin/env python

from sys import stdin
import re

m = re.compile('a')
for line in stdin:
    print(m.sub('ööön', line))

(Huom: Python ei tiputa rivinvaihtoa eli se kirjoittaa itse asiassa /dev/nulliin tyhjän rivin jokaisen rivin jälkeen.)

Tulokset:

sed – 1 min 50,91 s
Python – 1 min 46,19 s
Perl – 2 min 49,93 s

Onko siis vain pakko uskoa, että Python on pirullisen nopea?
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #5 : 18.05.12 - klo:23.57 »
Nopeinhan se tuossa oli joskin marginaalisesti sed: iin verrattuna.  Itse käytän mieluusti sed: iä tuon tyyppiseen "etsi/korvaa" tehtävään, lyhyt kirjoittaa. 
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #6 : 19.05.12 - klo:00.12 »
Nopeinhan se tuossa oli joskin marginaalisesti sed: iin verrattuna.  Itse käytän mieluusti sed: iä tuon tyyppiseen "etsi/korvaa" tehtävään, lyhyt kirjoittaa. 

Joo, ilman muuta, jos kyse olisi pelkästään näin yksinkertaisesta muutoksesta, niin sediähän silloin kannattaisi käyttää.

Kiistassa on kuitenkin kyse sellaisen web-käyttöliittymäisen tietokannan käsittelystä, jossa tiedot ovat levyllä XML-muodossa ja niistä pitää mahdollisimman nopeasti pyöräyttää HTML:ää.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

_Pete_

  • Käyttäjä
  • Viestejä: 1836
  • Fufufuuffuuu
    • Profiili
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #7 : 19.05.12 - klo:09.57 »
Innostua itsekkin testaamaan:

Python
Koodia: [Valitse]
$ time ./test.py <datafile.txt >/dev/null

real 0m7.908s
user 0m7.852s
sys 0m0.040s

Perl
Koodia: [Valitse]
$ time ./test.pe <datafile.txt >/dev/null

real 0m16.614s
user 0m16.541s
sys 0m0.036s

Java (Oracle Java 1.7.0_04 64bit)
Koodia: [Valitse]
$ time java -cp build/ ReplaceTest >/dev/null

real 0m12.723s
user 0m13.101s
sys 0m0.628s

 
Täältä löytyy Java lähdekoodi + datafile mitä käytin: http://corei7.no-ip.biz/~petria/replaceTest/



SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #8 : 19.05.12 - klo:10.30 »
Täältä löytyy Java lähdekoodi + datafile mitä käytin: http://corei7.no-ip.biz/~petria/replaceTest/

En oikeastaan osaa Javaa ollenkaan, mutta käsittääkseni testisi ei ole täysin sama. Koodin rivi:

Koodia: [Valitse]
                rplc = line.replaceAll("a", "öön");
...vastaa kai pikemmin Pythonin str.replace-metodia, joka korvaa staattisen alijonon? Tarkoitus oli käyttää säännöllisiä lausekkeita, vaikkei niiden käytöstä tässä mitään hyötyä olekaan.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

_Pete_

  • Käyttäjä
  • Viestejä: 1836
  • Fufufuuffuuu
    • Profiili
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #9 : 19.05.12 - klo:10.35 »
Täältä löytyy Java lähdekoodi + datafile mitä käytin: http://corei7.no-ip.biz/~petria/replaceTest/

En oikeastaan osaa Javaa ollenkaan, mutta käsittääkseni testisi ei ole täysin sama. Koodin rivi:

Koodia: [Valitse]
                rplc = line.replaceAll("a", "öön");
...vastaa kai pikemmin Pythonin str.replace-metodia, joka korvaa staattisen alijonon? Tarkoitus oli käyttää säännöllisiä lausekkeita, vaikkei niiden käytöstä tässä mitään hyötyä olekaan.


Eka parametri on regexp:
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String)




SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #10 : 19.05.12 - klo:10.45 »
Eka parametri on regexp:

OK, my bad.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

petteriIII

  • Käyttäjä
  • Viestejä: 660
    • Profiili
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #11 : 19.05.12 - klo:10.57 »
Tämä ei toimi läheskään niin kuin vaatimus oli; muutenkin eroaa mutta nimenomaan se muuttaa annetun tiedoston; taitaa Pythonkin olla hidas kun pitää kirjoittaa levylle?
Toiminta ei silti ole ratkaisevasti hitaampi kuin Pythonilla. Mutta sovellettuna matriisille taitaisi nopeus olla verraton - minun taitoni ei kylläkään muutokseen riitä. Koodi on seuraava:
Koodia: [Valitse]
ed -s ~/koeteksti <<< $',s/a/ööön/g\nw'

- kyllä toiminta nopeutuu RAM-diskilläkin ehdottomaksi ykköseksi. Mutta ram-diskin muodostaminen vaatii sudo:a joten taitaa jäädä muistoksi vain. Muuten sieltä RAM-diskiltä voi käydä lukemassa.
- tulee kammottavan kokoinen tiedosto.
- ajanmittaus time:llä kertoo että vielä olisi paljon parantamisenvaraa mikäli osaisi.
« Viimeksi muokattu: 19.05.12 - klo:12.18 kirjoittanut petteriIII »

odysseus

  • Vieras
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #12 : 19.05.12 - klo:12.07 »
Pikainen PHP versio. En tosin testannut ja lienekö tuossa eroa talletetaanko tulos eri bufferiin vai käytetäänkö koko ajan $c1 muuttujaa...

Koodia: [Valitse]
<?php
  $c1 
file_get_contents("datafile.txt");
  
$c2 str_replace("a""ööön"$c1);
  
file_put_contents("/dev/null"$c2);
?>


...ja tuosta tuleekin mieleen, että millainenkohan ero on file_get_contents() V fopen()+fread().

Pitänee vääntää tuo Ansi C:llä! Se kertonee sen optimin pohjatuloksen, ellei nyt sitten suoraan aleta ASMlla virittämään.

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #13 : 19.05.12 - klo:12.42 »
Pitänee vääntää tuo Ansi C:llä!

ANSI C:ssä ei ole säännöllisiä lausekkeita, mutta jo POSIX C:ssä olisi. Sama kävi mielessä, mutta näin matalan tason toteutuksessa on myös enemmän mietittävää: miten tiedostoa luetaan? rajoitetaanko merkkijonon kokoa, koska jo valmiiksi tiedetään rivin enimmäispituuden olevan 80 merkkiä, vai varaudutaanko rajattoman pitkiin riveihin?
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

odysseus

  • Vieras
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #14 : 19.05.12 - klo:12.57 »
Pitänee vääntää tuo Ansi C:llä!

ANSI C:ssä ei ole säännöllisiä lausekkeita, mutta jo POSIX C:ssä olisi. Sama kävi mielessä, mutta näin matalan tason toteutuksessa on myös enemmän mietittävää: miten tiedostoa luetaan? rajoitetaanko merkkijonon kokoa, koska jo valmiiksi tiedetään rivin enimmäispituuden olevan 80 merkkiä, vai varaudutaanko rajattoman pitkiin riveihin?



Jep, jotain tällaista kuitenkin. en tosin testannut tuotakaan, joten virheitä voi olla. tulee ainakin mieleen tuo ö-kirjain joka ei taida mennä putc:llä...

Koodia: [Valitse]
#include <stdio.h>

int main(int argc, char *argv[]) {
  FILE *fin, *fout;
  int c;
 
  if (!(fin = fopen("datafile.txt", "r")))
    return -1;
   
  if (!(fout = fopen("/dev/null", "w+")))
    return -2;
 
  while ((c = fgetc(fin)) != EOF) {
    if (c == 'a') {
      fputc('ö', fout);
      fputc('ö', fout);
      fputc('ö', fout);
      fputc('n', fout);
    }
    else {
      fputc(c, fout);
    }
  }
 
  fclose(fin);
  fclose(fout);
  return 0;
}

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #15 : 19.05.12 - klo:13.08 »
Muokkasin koodia vähän, jotta näkisin, mitä se kirjoittaa ulos. Merkistökoodauksen kannalta lopputulos on puuroa (salmiakkikysymysmerkkejä), mutta oleellista on tietysti, että merkkejä kirjoitetaan ulos täsmälleen oikea määrä.

Koodia: [Valitse]
/* test.c */

#include <stdio.h>

int main(int argc, char *argv[]) {
    int c;

    while ((c = fgetc(stdin)) != EOF) {
        if (c == 'a') {
            fputc('ö', stdout);
            fputc('ö', stdout);
            fputc('ö', stdout);
            fputc('n', stdout);
        }
        else
            fputc(c, stdout);
    }
    return 0;
}

Lopputulos 40-megaisella tiedostolla:

Koodia: [Valitse]
tn@bahtin [~/Tilap]$ time ./test < aaa.dat > /dev/null
./test < aaa.dat > /dev/null  0,05s user 0,01s system 100% cpu 0,060 total

...joten tuskin 400-megainen kestäisi kovinkaan monta sekuntia :) Tosin: nyt ei siis käytetä säännöllisiä lausekkeita.

Muoks: Niin siis merkkejä kirjoitetaan ulos täsmälleen oikea määrä, mutta tavuja paljon vähemmän, koska jokaisesta ö-merkistä puuttuu nyt puolet UTF-8:n vaatimista tavuista.
« Viimeksi muokattu: 19.05.12 - klo:13.10 kirjoittanut SuperOscar »
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #16 : 19.05.12 - klo:13.54 »
Lainaus
Lopputulos 40-megaisella tiedostolla:

Koodia:

tn@bahtin [~/Tilap]$ time ./test < aaa.dat > /dev/null
./test < aaa.dat > /dev/null  0,05s user 0,01s system 100% cpu 0,060 total


40M, 0,060 s  -->  667 MB/s ?  Mikä levy ?  SSD ?

Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #17 : 19.05.12 - klo:14.00 »
40M, 0,060 s  -->  667 MB/s ?  Mikä levy ?  SSD ?

Äh, enpä enää muista. Kone on Samsung X420 -läppäri, hdparm -I kertoo levystä seuraavaa:

Koodia: [Valitse]
/dev/sda:

ATA device, with non-removable media
Model Number:       WDC WD3200BEVT-22ZCT0                   
Serial Number:      WD-WXF0AA9X4369
Firmware Revision:  11.01A11
Transport:          Serial, SATA 1.0a, SATA II Extensions, SATA Rev 2.5
Standards:
Supported: 8 7 6 5
Likely used: 8
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors:   16514064
LBA    user addressable sectors:  268435455
LBA48  user addressable sectors:  625142448
Logical/Physical Sector size:           512 bytes
device size with M = 1024*1024:      305245 MBytes
device size with M = 1000*1000:      320072 MBytes (320 GB)
cache/buffer size  = 8192 KBytes
Nominal Media Rotation Rate: 5400
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, with device specific minimum
R/W multiple sector transfer: Max = 16 Current = 0
Advanced power management level: 128
Recommended acoustic management value: 128, current value: 254
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
     Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
     Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
Enabled Supported:
   * SMART feature set
    Security Mode feature set
   * Power Management feature set
   * Write cache
   * Look-ahead
   * Host Protected Area feature set
   * WRITE_BUFFER command
   * READ_BUFFER command
   * NOP cmd
   * DOWNLOAD_MICROCODE
   * Advanced Power Management feature set
    SET_MAX security extension
    Automatic Acoustic Management feature set
   * 48-bit Address feature set
   * Device Configuration Overlay feature set
   * Mandatory FLUSH_CACHE
   * FLUSH_CACHE_EXT
   * SMART error logging
   * SMART self-test
   * General Purpose Logging feature set
   * WRITE_{DMA|MULTIPLE}_FUA_EXT
   * 64-bit World wide name
   * IDLE_IMMEDIATE with UNLOAD
   * Segmented DOWNLOAD_MICROCODE
   * Gen1 signaling speed (1.5Gb/s)
   * Gen2 signaling speed (3.0Gb/s)
   * Native Command Queueing (NCQ)
   * Host-initiated interface power management
   * Phy event counters
   * DMA Setup Auto-Activate optimization
    Device-initiated interface power management
   * Software settings preservation
   * SMART Command Transport (SCT) feature set
   * SCT Long Sector Access (AC1)
   * SCT LBA Segment Access (AC2)
   * SCT Error Recovery Control (AC3)
   * SCT Features Control (AC4)
   * SCT Data Tables (AC5)
    unknown 206[12] (vendor specific)
    unknown 206[13] (vendor specific)
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
102min for SECURITY ERASE UNIT. 102min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 50014ee258f70735
NAA : 5
IEEE OUI : 0014ee
Unique ID : 258f70735
Checksum: correct
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #18 : 19.05.12 - klo:14.12 »
Heräsi vain epäilys kun tuolta levyltä ei edes saa dataa ulos tuota vauhtia että mittausmenetelmässä on jotain vinossa.  Kuitanneeko välimuisti sen tehdyksi ennen aikaisesti, tms.
Voisi kokeilla jollain isolla koetiedostolla laittaa "cat": lla tiedosto menemään harakoille >/dev/null että näkisi mitä vauhtia se levy antaa dataa ulos.

Koodia: [Valitse]
cat koe.txt  >/dev/null
PS. Tuttu levy, sama kuin Acerin 5520 läppärissä alkuaan. Vaihdoin jossain vaiheessa tilalle muuten vastaavan mutta 500 G kokoisen kun tuo hajosi.  

PPS.  Laitoin kokeeksi Areenasta nauhoitetun Pikku Kakkosen videon (296 M) menemään tuonne pohjattomaan kaivoon ja se antoi datanopeudeksi vanhalla koneella ja vanhalla pienemmällä PATA-levyllä (Maxtor 6L200P0) noin 43 MB/s.    Kävin Aceriakin kokeilemassa, näyttäsi antavan läppärissä noin 70 MB/s tuolla WD: n 500 G SATA-levyllä, malli WDC WD5000BPVT-0
« Viimeksi muokattu: 19.05.12 - klo:15.00 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Nopeuskisa: Perl vastaan Python – voiko olla totta?
« Vastaus #19 : 19.05.12 - klo:15.07 »
Heräsi vain epäilys kun tuolta levyltä ei edes saa dataa ulos tuota vauhtia että mittausmenetelmässä on jotain vinossa.

Heh, pikku moka... Olin pätkäissyt tiedostoni pienemmäksi (kokeillakseni ruudulle kirjoittamalla, että tulos varmasti on odotustenmukaista) ja erehdyksessä tein varsinaisen testinkin sillä. Nyt palautin tiedoston 40-megaiseksi, ja tulos on jo vähän toinen:

Koodia: [Valitse]
tn@bahtin [~/Tilap]$ time ./test < aaa.dat > /dev/null
./test < aaa.dat > /dev/null  3,95s user 0,03s system 99% cpu 3,986 total
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11