Linux で、Win32 スレッド プールが提供するのと同じレベルのカーネル スケジューラ サポートを提供するスレッド プールの抽象化を探しています。具体的には、特定の数の実行中のスレッドを維持するスレッド プールを見つけることに関心があります。実行中のプール スレッドが I/O でブロックされた場合、別のスレッドの実行を開始できるほどスレッド プールを賢くしたいと考えています。
Linuxでこのようなことを知っている人はいますか?
Linux で、Win32 スレッド プールが提供するのと同じレベルのカーネル スケジューラ サポートを提供するスレッド プールの抽象化を探しています。具体的には、特定の数の実行中のスレッドを維持するスレッド プールを見つけることに関心があります。実行中のプール スレッドが I/O でブロックされた場合、別のスレッドの実行を開始できるほどスレッド プールを賢くしたいと考えています。
Linuxでこのようなことを知っている人はいますか?
OS のサポートがなければ、これを行うことはできません。I/O でスレッドがブロックされていることを確認する適切な方法はありません。ブロックする可能性のある各操作の前にカウンターをアトミックにインクリメントし、後でカウンターをデクリメントする必要があります。次に、そのカウンターを監視し、ゼロを超えている場合は追加のスレッドを作成するスレッドが必要です。(スレッドが 1 秒以上アイドル状態になっている場合は、スレッドを削除します。)
一般的に言えば、努力する価値はありません。これは「Windows 方式」であり、Windows はそのためにゼロから構築されているため、Windows でのみうまく機能します。Linux の場合は、epoll
またはを使用する必要がありますboost::asio
。Windows 以外のオペレーティング システムで Windows の方法で動作させるのではなく、「Linux の方法」で動作するものを使用してください。
Windows で IOCP、Linux で epoll などを使用する独自のラッパーを作成できます。しかし、これらはすでに存在するので、気にする必要はありません。