Ich habe Cygwin ein gutes Stück verwendet, und habe es meist unproblematisch gefunden. Ich kenne einige der gemeldeten Probleme, habe sie aber selbst nicht erlebt. Einige Dinge auf Cygwin sind viel langsamer als der gleiche Code unter Linux - das merke ich am meisten mit Verzeichnis Scans, aber das ist wahrscheinlich nicht das einzige Ding. Die Leute beschweren sich über fork()
langsam, aber das ist nicht wirklich eine Überraschung, da "Forking" ist kein natives Konzept in Windows. Wenn Sie nur fork()
verwenden, um Subprozesse zu starten, könnte die gesamte fork/exec-Sache möglicherweise durch Aufrufe von nativen Windows-APIs ersetzt werden.
Eine mögliche Einschränkung von Cygwin ist, dass es Cygwin zur Laufzeit oder zumindest einen Teil der Cygwin-Infrastruktur benötigt. MinGW kann diese Einschränkung entfernen, allerdings auf Kosten der Tatsache, dass Sie eine größere Anzahl von Kompatibilitätsänderungen in Ihrem Code vornehmen müssen (z. B. Dateispeicherorte). Das letzte Mal, als ich nachgesehen habe, hatte MinGW nicht so umfangreiche Werkzeuge wie Cygwin, aber es ist wahrscheinlich gut genug für viele Zwecke.
Ich denke, eine andere Möglichkeit in diesen Tagen ist das Windows-Subsystem für Linux (WSL) unter Windows 10. Ich habe festgestellt, dass Code, der für Cygwin baut normalerweise erstellt und läuft ohne Änderungen auf WSL, aber ich habe nicht wirklich herausgefunden, was die relativen Vor- und Nachteile von Cygwin und WSL sind.
Ich habe keine Probleme mit Pthreads in Cygwin, MinGW oder WSL bemerkt; obwohl ich denke, dass irgendwelche probleme wahrscheinlich von der genauen art abhängen, wie sie threads verwenden. Ich kann das No-Wait-Socket-Problem nicht kommentieren, weil ich das nicht versucht habe.
Übrigens, sowohl Cygwin als auch MinGW können Sie native Windows API und andere Funktionen in DLLs aufrufen, wenn Sie benötigen. Es besteht also die Möglichkeit, eine Art "hybride" Anwendung zu erstellen, die POSIX-ähnliche Funktionen und auch Win32-APIs verwendet. Dies kann nützlich sein, wenn sich herausstellt, dass einige Dinge mit Win32-Funktionalität viel schneller sind. Ich bin mir nicht sicher, ob das mit der WSL möglich ist.
Cygwin ist in Ordnung, wenn Sie die Lizenzbedingungen einhalten, die die Bereitstellung des Quellcodes erfordern. – tim18