Qual è la lingua più adatta per le attività sui file pesanti?

0

Ho bisogno di scrivere uno script (basato su funzioni base) per elaborare / immagini / file audio / video. Il processo è principalmente attività del file system e converte. Il database dei file è stato memorizzato da mysql. Lo script è semplice ma causa pesanti attività sul sistema; per esempio rinominare / convertire / copiare migliaia di file in una corsa. Lo script non legge il contenuto dei file in memoria, ma semplicemente gestisce i comandi per i sottoprocessi. Il peso principale è sulla comunicazione con il filesystem. Lo script verrà usato regolarmente per i nuovi file. La mia preoccupazione riguarda le prestazioni. Sto pensando

  1. Script di shell
  2. un linguaggio conforme come C

Si prega di indicare quale linguaggio di programmazione è più adatto a questo scopo e perché?

UPDATE: Un esempio è scansionare una cartella per immagini, convertirle con ImageMagick , spostare i file nella cartella di destinazione, ottenere informazioni sui file, quindi aggiornare il database. Come puoi vedere, il processo non ha spazio per l'ottimizzazione e la maggior parte delle lingue ha API simili per programmi popolari come ImageMagick , MySQL , ecc. Quindi, può essere scritto in qualsiasi lingua. Desidero solo ridurre l'utilizzo delle risorse accelerando il ciclo lungo.

NOTA: So che le domande sul confronto tra lingue non sono favorevoli, ma ho davvero avuto problemi a scegliere, perché i problemi possono apparire in azione.

    
posta Googlebot 12.12.2012 - 01:55
fonte

3 risposte

3

Mi sembra che tu stia semplicemente consegnando questi file a un altro software per leggerli realmente. Se questo è il caso, usa python o ruby o qualsiasi altro linguaggio di alto livello facile da usare che hai a disposizione perché questo programma non è effettivamente IO intenso.

Ora, se in realtà stai leggendo il contenuto dei file in te stesso da elaborare da solo, direi che se la lingua che usi normalmente non ha alcuna interoperabilità per effettuare chiamate a livello di sistema operativo, non usare quella lingua.

Idealmente in questo caso vorresti un linguaggio di alto livello con servizi di basso livello .

C #, ad esempio, funziona bene consentendo una gestione di alto livello di elementi semplici come l'elaborazione dell'input dell'utente dalla riga di comando e l'organizzazione dei passaggi dell'attività o di qualsiasi altra cosa, ma consentendo quindi chiamate del sistema operativo e gestione diretta della memoria per le massime prestazioni possibili (se necessario!). Java potrebbe fare allo stesso modo? Non certo. Haskell è di altissimo livello e dispone di strutture per la manipolazione diretta della memoria, anche se Haskell ha una barriera estremamente alta per l'apprendimento se non lo conosci già. C ++ è probabilmente la lingua più comunemente utilizzata per questo tipo di attività per questo scopo esatto, è un linguaggio di alto livello e con C nelle sue radici ha funzionalità complete di basso livello disponibili.

Detto questo, fai attenzione all'ottimizzazione prematura. Scrivere un programma in una lingua che non è il tuo linguaggio più strong probabilmente eseguirà quello che potresti scrivere nella tua lingua nativa in quanto non saresti a conoscenza delle ottimizzazioni disponibili o stai usando la lingua in modo appropriato. Inoltre, l'unico modo per sapere se il percorso più veloce e più robusto di usare la tua lingua principale non funziona è dare una possibilità che sarebbe molto più rapida di andare all-in su una lingua che non conosci. Quindi, prototipa qualcosa e guarda come funziona, se non pensi che faccia abbastanza bene allora fai un prototipo veloce in altre lingue e confrontalo.

Il prototipo come parte dell'analisi della soluzione tecnica è un'abilità sempre importante per tutti i programmatori, quindi approfitta di questa attività per esercitarti. Nel metodo scientifico non proviamo a dimostrare la nostra ipotesi in quanto ciò porta a pregiudizi, piuttosto cerchiamo di confutarli. La tua ipotesi è che il tuo linguaggio normale non funzioni abbastanza bene per questo compito, quindi inizia cercando di smentire quello.

Modifica: In base alla tua modifica, il tuo programma non è assolutamente IO, quindi scrivilo nella lingua che ti è più comoda

    
risposta data 12.12.2012 - 02:53
fonte
1

Se utilizzerai questo script / programma 100 volte più del tempo necessario per scrivere, scriverò alcuni semplici test in entrambi i modi ed eseguirò un test di temporizzazione.

Quando usavo VB 6, potevo fare l'I / O di file usando VB, ma potevo anche chiamare le routine di sistema direttamente nella DLL da VB 6 e talvolta ottenere prestazioni migliori di 100x. Non è proprio la lingua, ma quanto bene puoi maneggiarla efficacemente.

Se la shell è facile da usare e può fare uso diretto delle funzioni di sistema di basso livello, usala, altrimenti vai con il programma C e usa le funzioni di sistema di basso livello. Il punto è che le funzioni di sistema di basso livello dovrebbero eseguire qualsiasi linguaggio cercando di fare la stessa cosa con una notevole rilevanza. Si rinuncia alla sicurezza del copione / linguaggio per la velocità.

Modifica

In base all'aggiornamento, vorrei concentrarmi su come utilizzare ImageMagick per più thread.

Vedi: Operazioni multi-thread? che suggeriscono

If you add --enable-openmp to your configure script command line and build ImageMagick, convolution operations run in multiple threads (e.g. blur, sharpen, unsharp mask, edge, etc).

Lo farei in qualsiasi lingua sia più semplice in quanto sembra che non si possa ottenere il miglior guadagno in termini di prestazioni nella lingua scelta ma nella configurazione delle app.

    
risposta data 12.12.2012 - 02:10
fonte
0

Considererei python o qualsiasi altro linguaggio di alto livello, dinamico e interpretato per questi motivi:

  • Relativamente facile da raccogliere
  • I nomi di file di maneggevolezza, il taglio delle stringhe, ecc. sono semplici
  • L'accesso ai DB è similmente piuttosto semplice usando un modulo integrato
  • L'uso del modulo threading offre una concorrenza rapida, semplice, facile da capire ed è efficace a patto che il programma python sia legato all'I / O (ad esempio, sulla copia di FS)
risposta data 12.12.2012 - 02:16
fonte

Leggi altre domande sui tag