2017-10-04 1 views
0

Je considère utiliser C pour effectuer certains traitements backend pour mon application, au moins pour une expérience d'apprentissage si ce n'est pas le cas.Utilisation des classes Java Runtime et Process pour exécuter du code C par rapport à l'interface native

Normalement, ce que je ferais est d'écrire un programme C en tant que commande shell autonome, et d'utiliser Process.exec pour l'exécuter et obtenir des résultats.

Mais la pensée des frais généraux est venue à l'esprit. Combien de temps cela créerait-il pour invoquer un processus shell à chaque fois que l'un de ces programmes C doit être appelé? Est-il préférable d'utiliser l'interface JNI pour améliorer les performances?

L'application serait hébergée sur un serveur et aurait à faire face à de nombreuses demandes simultanées, donc mon instinct est que JNI est le moyen le plus efficace. Mais je ne sais pas encore assez sur ce domaine, donc quelques conseils sur la façon dont cela affecterait la performance seraient utiles.

Répondre

0

Je propose de commencer ici:

http://jnicookbook.owsiak.org/recipe-No-001/

Vous obtiendrez le sentiment de la façon de traiter avec JNI. Je commence par des choses simples et ensuite, je me dirige vers des sujets plus complexes - vous devrez probablement faire face à la plupart d'entre eux tout en traitant avec JNI.

Je suggère de commencer avec simple Hello World - juste pour s'assurer, vous avez env.

Et, quand il s'agit de la performance. Je suggère de suivre le test. Essayez d'exécuter « Bonjour tout le monde » comme processus autonome, puis, via JNI et comparez les résultats :)

De préférence, l'exécuter pour un temps plus long;)

Pour vous donner sale, laid, gras, estimation . Disons que vous voulez imprimer "Bonjour tout le monde!" en utilisant JNI vs Process constructeur - 1000 fois.

JNI: 4ms 
Process: 3275ms 

Mise à jour

Si vous voulez faire des tests juste après ne

git clone https://github.com/mkowsiak/jnicookbook.git 
cd jnicookbook/recipeNo033 
make 
make test 

Amusez-vous avec JNI!

+0

Wow, c'est un énorme décalage horaire! Merci pour l'info, je vais être sûr de vérifier. –