4

C ライブラリのバインディングとなるネイティブ ノード モジュールを C++ で作成しています。

このライブラリの一部のオブジェクトは、単一のスレッドでのみ使用する必要がありますuv_queue_workつまり、私が使用する場合、それらが同じスレッドによってのみ使用されていることを確認できないことを意味します。なぜなら、私の知る限り、 libuv はスレッドプールを使用しており、どのスレッドかを伝える方法を見つけることができなかったからです。このような作業に使用します。

ここに状況に対するいくつかのアイデアがありますが、どちらが正しいアプローチかはわかりません。

  • すべてのメソッドを同期させるだけです。残念ながら、これはノードの目的と概念を打ち負かします。
  • カスタム スレッドを作成し、その上でコードを実行します。これは、libuv のスレッド プールの目的を無効にし、より多くの作業が必要になります。
  • libuvに、スレッドプール内の同じスレッドで同じオブジェクトの操作を実行するように伝えます-ドキュメントでこれを行う方法が見つかりませんでした

この種の Node.js モジュールに対して推奨される一連のアクションは何ですか?

4

1 に答える 1

2

アーキテクチャがジェネリック コールバック モデルをサポートしていないのは残念なことですが、これは避けられない特殊なケースであることは認めます。

ネイティブ モジュールの libuv API には引き続き完全にアクセスできるため、その単一のスレッドを使用して独自のスレッドを作成し、該当するすべての非同期作業をスケジュールすることは完全に可能です。簡単な入門書については、http://nikhilm.github.io/uvbook/threads.htmlをご覧ください。

操作が完了したら、目的の js コールバックを に渡すことができますMakeCallback。これにより、js API のやり取りが正常に表示されるようになります。

于 2013-07-01T06:48:53.033 に答える