L'interfaccia C di Python è più veloce di JNI?

4

Stavo leggendo Cosa rende le chiamate JNI lente? e mi chiedevo se l'interfaccia C di Python fosse migliore di JNI.

Ho sentito che se vuoi rendere certe parti dei tuoi programmi Python più veloci, o se una certa parte del programma sta danneggiando le prestazioni del tuo programma, le scrivi in C e le fai chiamare a Python.

L'interfaccia C comporta gli stessi costi di JNI? perché o perché no?

    
posta Mahmoud Hossam 22.12.2011 - 03:45
fonte

1 risposta

7

Anche se non conosco una risposta diretta alla tua domanda, non posso resistere alla risposta indiretta:

I heard that if you want to make certain parts of your python programs faster, or if a certain part of the program was really hurting your program's performance, you write them in C, and make Python call them.

Come scritto in la risposta più alta della domanda SO che hai collegato a , "lento" qui significa decine di nanosecondi. Se la tua parte costosa (scritta in C) richiede anche solo un microsecondo per essere eseguita, il costo proporzionale dell'interfaccia C / JNI è trascurabile. Il costo arriva solo ogni volta che chiama la parte nativa (e quando la chiamata ritorna), non mentre la parte nativa è in esecuzione. Se si mantiene basso il numero di chiamate, il costo aggiuntivo è basso. Cioè, non scrivere loop Python stretti che chiamino funzioni C; scrivi il ciclo stesso in C e chiamalo da Python.

Un altro esempio del fatto che i costi JNI sono in genere trascurabili: molte delle classi principali di JDK, ad es. la maggior parte delle funzioni in Math , e in definitiva tutte le funzioni grafiche e I / O mappa per le chiamate JNI sotto il cofano. Indipendentemente da ciò, Java è generalmente considerato molto più veloce di CPython.

    
risposta data 22.12.2011 - 09:57
fonte

Leggi altre domande sui tag