2009-11-29 3 views

Répondre

7

fork(2) est critique sous Cygwin, car le modèle de processus Windows ne le permet pas facilement. Cygwin peut permettre à son spawn de l'utiliser, mais vous allez subir un sérieux problème de performance car Cygwin doit tout émuler manuellement - y compris copier les données exécutables, copier les poignées ouvertes, etc.

Selon comment beaucoup de fusils utilisent fork(2), cette émulation pourrait être douloureuse ou elle pourrait être relativement mineure.

Voici un good thread on GameDev.net qui parle de l'absence d'une fonctionnalité fork sur Win32. Ils apportent quelque chose que je n'ai pas la patience ou l'accessibilité plate-forme pour enquêter, mais semble certainement amusant, dangereux et explosif tout en même temps:

Donc, vous devez contourner Win32 et appeler le natif API ({Nt | Zw} CreateProcess). Le livre "Windows Nt/2000 Natif Api référence" a un exemple "Forking un processus Win32". Cela peut être ce dont vous avez besoin.

Je suis intrigué, mais je doute que Cygwin l'utilise. Il est probablement là, pour réitérer ma réponse à votre question - beaucoup d'applications Unix s'appuient sur fork, et Cygwin le rend probablement disponible. Ne vous attendez pas à des miracles, et vous devrez rendre Ruby conscient de Cygwin en le recompilant pour inclure sa couche d'émulation.

+0

Bonne réponse! Je vais essayer de recompiler Ruby avec la couche d'émulation Cygwin demain. Si cela fonctionne, ce serait génial. un coup de performance serait ok. L'autre chemin semble risqué, et il faudrait beaucoup de piratage ... mais il est bon de savoir ce qui est possible. Merci beaucoup! – picardo

Questions connexes