私はCygwinをフェアビットで使用しましたが、ほとんど問題はないことがわかりました。報告された問題のいくつかを認識していますが、自分で経験したことはありません。 Cygwinのいくつかのものはであり、Linux上では同じコードよりも遅いです。私はこれをディレクトリスキャンで最もよく認識していますが、それだけではありません。人々はfork()
が遅いと不平を言うが、それは実際には驚きではない。なぜなら 'フォーク'はWindowsのネイティブな概念ではないからだ。 fork()
を使用してサブプロセスを起動しているのであれば、fork/execの全体を選択的にネイティブWindows APIの呼び出しに置き換えることができます。
Cygwinの潜在的な制限は、実行時にCygwinを必要とするか、少なくともCygwinインフラストラクチャを必要とすることです。 MinGWはこの制限を取り除くかもしれませんが、あなたのコード(例えば、ファイルの場所)に互換性関連の変更をたくさん残さなければなりません。私が最後に見た時、MinGWはCygwinと同様に広範なツールを持っていませんでしたが、多分多くの目的のためには十分です。
最近、Windows 10のLinux用Windowsサブシステム(WSL)が考えられます。Cygwin用に構築されたコードは、通常WSL上で変更せずにビルドされ実行されていますが、 CygwinとWSLの長所と短所を比較しました。
私はCygwin、MinGW、WSLのpthreadsには気づいていません。スレッドを使用する正確な方法によって問題が発生する可能性が高いと思います。それは私が試したことではないので、私はノーウェイトソケットの問題にコメントできません。
ちなみに、CygwinとMinGWの両方で、必要に応じてネイティブWindows APIやDLLの他の関数を呼び出すことができます。そのため、POSIX型関数とWin32 APIを使用する一種の「ハイブリッド」アプリケーションを作成する可能性があります。これは、Win32の機能を使った方がはるかに高速であることが判明した場合に役立ちます。これがWSLで可能であるかどうかはわかりません。
ライセンス条項を遵守してソースコードを提供する必要がある場合、Cygwinは問題ありません。 – tim18