2014-12-06 6 views
6

Quindi sto giocando con la finestra mobile per la prima volta sul mio Mac. Ho usato boot2docker attraverso il tutorial standard e sto iniziando un prompt in un'immagine di Ubuntu.accelera Python, perché?

docker pull ubuntu 
docker run -i -t ubuntu /bin/bash 

Quando nella finestra mobile ho avviato il mio primo esperimento, per vedere se le prestazioni sarebbero diminuite. Dalla riga di comando userei il modulo python timeit per controllare rapidamente alcune misure di base delle prestazioni.

Mac Python Risultati
$ python3.4 -m timeit '"-".join(str(n) for n in range(100))' 
10000 loops, best of 3: 37.7 usec per loop 
$ python3.4 -m timeit '"-".join([str(n) for n in range(100)])' 
10000 loops, best of 3: 34.2 usec per loop 
$ python3.4 -m timeit '"-".join(map(str, range(100)))' 
10000 loops, best of 3: 26.2 usec per loop 
Docker Python Risultati
> python3 -m timeit '"-".join(str(n) for n in range(100))' 
10000 loops, best of 3: 30 usec per loop 
> python3 -m timeit '"-".join([str(n) for n in range(100)])' 
10000 loops, best of 3: 26.9 usec per loop 
> python3 -m timeit '"-".join(map(str, range(100)))' 
10000 loops, best of 3: 20.2 usec per loop 

Sembra strano che la finestra mobile di Ubuntu, che è in esecuzione in cima al mio mac, è in realtà l'esecuzione di codice python più veloce del pitone su Mac. C'è qualche ragione per cui questo potrebbe essere?

Modifiche

Posso confermare che entrambe le versioni di Python sono in esecuzione a 64 bit.

Mac Python
python3 -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)' 
7fffffffffffffff True 
Ubuntu Python
python3.4 -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)' 
7fffffffffffffff True 
+0

Sono entrambi la stessa versione di Python 3.x? –

+0

ubuntu esegue '' 'Python 3.4.0''' mentre mac esegue' '' Python 3.4.1''' se qualcosa può aiutare a spiegare perché il Mac dovrebbe essere più veloce, no? – cantdutchthis

+0

Mac Python è in esecuzione come eseguibile a 32 bit e la versione mobile è un eseguibile a 64 bit? Ho anche visto le opzioni del compilatore fare una differenza significativa nelle prestazioni. – casevh

risposta

0

Questo è più circa la differenza nei sistemi operativi di circa prestazioni finestra mobile. Misurare le prestazioni delle applicazioni può essere complicato.

La linea di fondo è che OS X ha un buon numero di processi che competeranno con il tuo test e OS X probabilmente non ha dato al tuo test una priorità elevata.

Un contenitore deve funzionare come l'ambiente nativo (a volte meglio) nella maggior parte dei casi. Ma il tuo test dovrebbe far funzionare il contenitore. Docker dovrà aggiungere un sovraccarico quando l'applicazione sta effettuando chiamate di sistema e accedendo a I/O, quindi è necessario includerli entrambi nel test.

IBM ha scritto un documento sul problema di Linux Container vs Native env lo scorso anno.

http://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf

Problemi correlati