2012-05-06 9 views
7

Linuxの場合。何が良いですか:スレッドと選択しますか?

キーを押したときに有効/無効機能を持つオートクリッカーを作成したいと思います。明らかに、2つのものが並行して実行されるべきである(クリッカー自体と有効/無効機能)

各実装の短所と賛否は何か: オートクリック機能と別のメインスレッドを扱うスレッドを使用する有効/無効など) または、syscallを使用して、入力/キーボードを選択して待ちますか?

+2

あなたはそれをどちらでも行うことができます。ここで「より良い」測定値を定義する測定値は何ですか? –

+1

私はちょうど各オプションの利点が何であるかを知りたいです – Jah

+1

@ Jah:それでは、「より良い」と尋ねるのではなく、それを尋ねたはずです。 –

答えて

7

selectを使用すると、パフォーマンスが向上します。特に、数百の同時操作が発生する可能性がある場合は、パフォーマンスが向上します。しかし、コードを正しく記述することは難しく、コーディングのスタイルは従来のシングルスレッドプログラミングとは大きく異なります。たとえば、アプリケーション全体をブロックする可能性があるため、ブロッキングメソッドを呼び出さないようにする必要があります。

ほとんどの人は、コードの大部分が通常のシングルスレッドコードに似ているため、スレッドの使用が簡単であることがわかります。唯一困難な部分は、スレッド間通信やmutexなどの同期メカニズムが必要な少数の場所です。

特定のケースでは、スレッドの数が少なくて済むように思われるので、スレッドを使用したより単純なプログラミングモデルに移行します。

+5

最初の文には引用が必要です。現代のシステムではそれよりずっと複雑だと思う。確かに*多くの*ファイル記述子があると、スレッドは 'select'ではなくブロックされているスレッドを目覚めさせ、' N'ビットを配列内で繰り返しスキャンし、それぞれの待ち行列から自身を追加/削除する必要があります。スレッドは、ユーザーカーネルの移行が最小限になるように最適化できるようにも見えます。スレッドが遅い他の直交的な理由があるかもしれませんが、私はそれが単純な明確な問題ではないと思います。 –

1

あなたがやっている作業の量を考えると、おそらく問題ではありません。

高性能アプリケーションでは、違いがあります。このような場合、同時に数千の接続を処理する必要があります。そのような場合は、新しいスレッドに新しい接続を渡します。

数千のスレッドを作成するのは高価です。効率を上げるために選択が使用されます。実際には、kqueueまたはepollのような異なる技術が最適なスイッチングに使用されます。

スレッドを一度しか作成せず、アプリケーションの存続期間中に正確に2つのスレッドを実行している可能性が高いので、問題はありません。

関連する問題