Unix rispetto a Windows (Java e C ++) [chiuso]

2

In primo luogo dovrei spiegare lo sfondo. Sono interessato ai ruoli di programmazione commerciale ad alta frequenza. Dopo aver esaminato molte specifiche di lavoro, è chiaro che c'è una grande richiesta di programmatori che hanno programmato Java e C ++ su Unix rispetto a Windows.

La mia domanda è quali sono le differenze che un programmatore High Freq potrebbe incontrare? Non può essere qualcosa nel linguaggio stesso perché sintatticamente non differiscono sul sistema operativo? Quindi ho pensato che dovesse essere qualcosa che il linguaggio di programmazione deve interfacciare, risorse etc?

Qualcuno potrebbe aiutarmi perché sto cercando di migliorare il mio C ++ / Java su Unix, per mirare a questo tipo di carriera?

ps Immagino che parte di questa risposta dipenda dall'infrastruttura socket su Unix?

    
posta user997112 21.11.2011 - 17:00
fonte

4 risposte

2

Ho lavorato in un negozio di HF e in un'altra azienda di servizi per un breve periodo. Si preoccupano della velocità. Velocità del software, velocità della rete e qualsiasi altra cosa che potrebbe avere a che fare con la velocità.

Usano Linux per la stabilità, come altri hanno notato, ma anche perché ti permettono di sintonizzare, misurare e controllare quasi tutto. Con una scatola multicore, è possibile utilizzare il programma "tasket" per mantenere il processo su una CPU dedicata, ad esempio. Ma fondamentalmente, Linux ti consente di modificare, controllare e persino modificare il kernel del sistema operativo. Quindi dì che ricevi un messaggio di scambio che è solo 1kb. È possibile controllare il driver ethernet per attivare un interrupt non appena arriva quel piccolo frammento di dati, mentre l'impostazione predefinita potrebbe essere quella di attendere ulteriori dati. I negozi di HF si preoccupano di questo per la latenza.

Programmando saggiamente, impara tutto ciò che puoi sul C ++, inclusi i modelli. Scopri come velocizzare i programmi in qualsiasi modo possibile. Informazioni sulla 'località di riferimento' per mantenere i dati nelle vicinanze in memoria, in modo che rimangano nella cache anziché essere scaricati. Informazioni sull'assemblaggio, così puoi vedere che una riga di C ++ produce istruzioni X asm, ma un'altra linea produce X-1. Informazioni su thread e processi e su come il kernel controlla la pianificazione del processo (esistono diversi modi per controllarlo).

Java è diverso, ma non so abbastanza per darti qualche consiglio. Quello che ho sentito è imparare come mantenere i blocchi di codice nella cache e funzionerà alla velocità del C ++. Scopri tutto ciò che puoi sul rendere Java veloce e le diverse VM java disponibili su Linux.

Quindi Linux è come una macchina da kit, e Windows è come una macchina fuori dalla catena di montaggio di GM. Windows è di taglia unica e non si ottengono dettagli interni senza eseguire il bombardamento $ su Microsoft. Quindi l'incertezza aggiunta se la prossima versione di stuxnet potrebbe arrivare e compromettere l'intera rete. O il prossimo anno cambieranno l'API e dovrai imparare tutto da capo. Linux è solido e cambia molto poco.

Spero che questo aiuti.

    
risposta data 23.11.2011 - 16:15
fonte
3

I server di transazione sono principalmente (ma non solo) Unix: questo perché Unix è altamente stabile e meno affamato di risorse. Una ragione meno importante ma non ignorabile sono le applicazioni legacy. Non vorresti spostare un server di transazione basato su unix stabe su Windows.

Ma questo non significa necessariamente che devi programmare su Unix. Una volta ho fatto un progetto su Oracle D2K. L'app funziona su Windows ma i moduli sono stati archiviati su un server Unix.

Se stai guardando la programmazione C ++ per sistemi ad alto volume, presta molta attenzione al threading e alla gestione delle eccezioni, a parte la programmazione dei socket. Impara tutto ciò che puoi sull'ottimizzazione delle applicazioni. Pochi libri ti insegnano questo. Impara ciò che puoi dalle persone sopravvissute e dalla tua esperienza.

    
risposta data 21.11.2011 - 18:16
fonte
1

Avrai bisogno di sapere come usare i vari strumenti di profilazione e performance di Unix (tutto da ps a dtrace ), più tutti gli altri strumenti di sviluppo (scripting di shell, Perl, awk, find, xargs. ..). Avrai bisogno di sapere come aggirare il file system (ad esempio come ottenere i contatori delle prestazioni dalla directory /proc ). Non ho lavorato in quel particolare settore, ma generalmente le posizioni Unix dipendono molto di più dall'utilizzo di strumenti generici da riga di comando rispetto alle cose basate sulla GUI.

    
risposta data 21.11.2011 - 18:48
fonte
0

Una volta ho lavorato in un progetto Java in cui abbiamo sviluppato un'applicazione ERP che funzionava sia su Linux che su Windows. Ho sviluppato su Linux (Java, Eclipse) ma i principali clienti lo usavano su Windows.

Il codice Java non ha richiesto alcuna modifica tra Linux e Windows. L'unica differenza che ho notato è che l'applicazione è stata eseguita molto più velocemente su Linux e un mio collega mi ha spiegato che il file system di Linux è molto più veloce del file system di Windows. Forse questa (performance) è una delle ragioni per cui c'è una grande richiesta di sviluppatori che possono lavorare su un sistema UNIX.

    
risposta data 21.11.2011 - 19:12
fonte

Leggi altre domande sui tag