問題タブ [libuv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - V8 で C++ コールバックから Javascript 関数を呼び出す
C++ コールバックが呼び出されたときに登録済みの JS 関数を呼び出そうとしていますが、スコープの問題であると思われるセグメンテーション違反が発生しています。
イベントが発生すると、次のメソッドが呼び出されます。これはおそらく、V8 が JS を実行している別のスレッドで発生すると想定しています。
これにより、セグメンテーション違反が発生します: 11. addEventListener() から Persistent への参照を使用してコールバック関数を直接呼び出すと、関数が正しく実行されることに注意してください。
ロッカーまたはアイソレートが必要だと思いますか? また、libuv の uv_queue_work() がこれを解決できるように見えますが、スレッドを開始していないため、どのように使用するかわかりません。
google-chrome-extension - libuv を使用してファイルの変更を監視する
特定のフォルダーの変更を監視し、ブラウザーの CSS/JS/画像ファイルを更新/更新する開発者ツール用の Chrome 拡張機能を構築したいと考えています。
すでに同様のアプローチがあります:
Tin.cr は、サンドボックス化されておらず、セキュリティ上の問題がある NPAPI を使用しているため、会社のポリシーに厳しい規則がある開発環境 (特に金融業界) では使用できません。
もう 1 つの方法は、NaCl (サンドボックス化された Chrome のネイティブ クライアント) を使用することです。
私は C の知識がほとんどないフロントエンド開発者なので、助けが必要です。
libuvでファイルの変更を監視/監視するにはどうすればよいですか? 誰かがコード スニペットを提供できれば、非常にありがたいです。
ドキュメントから私が理解していることから、libuvは拡張機能がクロスプラットフォームで動作することを可能にします.私は間違っていますか?
ありがとう
c++ - libuvスレッドは安全ですか?
libuv実行ループ専用の新しいスレッドを作成しました。スレッド関数は次のようになります。
refカウンターのインクリメントにより、スレッドは存続し、libuvイベントを処理できる状態に保たれます。uv_unref
メインスレッドで実行することにより、実行ループを終了させ、スレッドを終了させることができるようにしたいと考えています。
ただし、uv_ref
ソースコードを調べたところ、同時アクセス中に参照カウンター変数へのアクセスが同期されるという保証はありませんでした。さらに、実行ループ中にオペレーティングシステムへの制御を放棄するためのyield呼び出しは見られませんでした。つまり、プログラムは他のプロセスとうまく連携しません。
これにより、私はlibuvを正しい方法で使用していないと信じるようになります。誰かが私が間違っていることを説明できれば、それは素晴らしいことです!
c++ - Node.jsアドオンタイマーコンテキスト
libuvタイマーメソッドはここに記載されており、Node.jsアドオンが定期的にコールバックを受信して任意の処理を実行する方法を提供します。
ここで、コールバックはプロトタイプを使用したタイムアウトメソッドです。
タイマーコールバックプロシージャに、できればvoid *の形式でコンテキストを提供するにはどうすればよいですか?
node.js - node.js 内の ImageMagick がクラッシュするのはなぜですか?
ImageMagick でコンパイルされた node.js、node-vips、libvips を使用して、画像の変換とサイズ変更を行っています。2 つ以上の画像のサイズを変更しようとすると、セグメンテーション違反が発生し、アサーションが失敗します。
私は非常に多くの異なるクラッシュを経験しており、どこから始めればよいかわかりません。libvips 7.26.8 から始めましたが、7.30.7 も試しました。これは、かなり標準的でクリーンなubuntuボックスで、ソースからコンパイルされたノードv0.8.17を使用しています。
多くの場合、最初の 2 つのエラーのいずれかが表示されます。つまり、スタック トレースがありません。これらはすべて、6 枚ほどの画像のサイズを変更しようとしたときに発生しました。エラーなしですべて成功することもありますが、通常は、最初の 1 つまたは 2 つの画像のサイズが変更された後にエラーが発生します。
これをデバッグするにはどうすればよいですか?
node-vips プラグインの単体テストには、次のようなコメントがあります。
libeio から呼び出されたときに imagemagick がクラッシュするため、vips が imagemagick サポート付きでコンパイルされている場合、このテストはクラッシュします。
どうしてこれなの?これはまだ本当ですか?ImageMagick は完全にスレッドセーフだと思っていましたが、libeio/libuv から呼び出すのが安全ではないのはなぜですか?
c++ - libuvはuv_listen()でメモリリークを引き起こしますか?
libuvを使用する小さなプログラムをテストします。
プログラムのデバッグ出力にメモリリークが表示されます。
調子
libuvバージョン
- os:Windows 7.0
- コンパイラ:vs2010
私のテストコード
結果
内部リークの場所
コールスタック
コード
c - libuv で子プロセスの stdout をキャプチャする
libuvを使用しています。http://nikhilm.github.com/uvbook/processes.htmlを読みましたが、子プロセスの stdout をキャプチャして親で使用できるようにする方法がまだわかりません (ただし、親の stdin の代わりにはなりません) )。
私のコードは現在:
ダミー.c:
私は libuv のパイプのポイントをまだよく理解していないというしつこい気持ちがあります。
libuv - libuv を正しく起動して実行し、それを使用してプログラムをコンパイルできるようにする
プロジェクトで libuv を使用しようとしています。私の最初のステップは、コンピューターに libuv をインストールして使用できるようにすることです。Mac OS X バージョン 10.6.8 を使用しています。zipファイルをダウンロードして解凍しました。彼らのサイトの説明では、make コマンドを使用してライブラリをビルドするように単純に書かれています。これを行うと、libuv.a ファイルが作成されます。コード ファイルに #include があります。実際、この時点では、彼らの紹介ペーパーで提供されているサンプル プログラムをコンパイルして実行しようとしているだけです。http://nikhilm.github.com/uvbook/basics.html . 友人の助けを借りて、make run-test を実行すると libuv.dylib が作成され、LD_LIBRARY_PATH=../deps/libuv-master ./testEventLoop を設定している限り、プログラムがコンパイルおよび実行されることがわかりました。
私はバージョン3.81を作りました。私のプロジェクトは、2 つのディレクトリ deps と src を持つ echo というフォルダーにあります。すべてのサブファイルを含む、抽出された libuv ファイルは dep 内にあります。test.c ファイルと私の make ファイルは src フォルダーにあります。
サードパーティのライブラリを使用したのはこれが初めてで、壁に頭をぶつけているようです。特にサードパーティのライブラリと libuv を使用して、ネット上で見つけることができるすべてのものを見てきました。libuvの makefile と他のいくつかのプロジェクトの make ファイルをlibuv を使用している web。
これらのプロジェクトは非常に大きいため、この小さなことを掘り下げるのに非常に苦労しています。サードパーティのライブラリで助けが必要な人が他にもいるはずです。私は非常に近づいているように感じますが、何かを得ていないだけです.
含めるべき情報を省略した場合はお知らせください。質問を編集します。
javascript - node.js の内部非同期 I/O メカニズムに関する混乱
- node.js が内部的に libeio を使用して、*nix プラットフォームでスレッド プールを使用して非同期ファイルI/O を実行することを知りました。
- 非同期ネットワークI/O はどうですか? それはlibevによって行われますか?スレッドプールもありますか?
- 内部にスレッド プールがある場合、従来のリクエストごとに 1 スレッドのモデルよりも効率的である可能性はありますか? また、I/O 要求ごとに 1 つのスレッドですか?
- そして、窓のメカニズムは何ですか?IOCP によって行われ、カーネル レベルのスレッド プールがあることは知っていますよね?
- Windows IOCP のようなネイティブの完全な AIO メカニズムがまだ Linux にないのはなぜですか? 将来的にはありますか?
Changchang の回答に従って更新します。
- @changchang が提供したソース コードを簡単に確認したところ、デフォルトのスレッド プール サイズはUV_THREADPOOL_SIZEでリセットできることがわかりました。
- また、getaddrinfo がこのスレッド プールを使用していることがわかりました。fs 以外に他にあるでしょうか。また、すべての同期ジョブがこのスレッド プールで実行される場合、既定のサイズ '4' で十分ですか?
- 私の理解では、node.js プロセスには 6 つの基本的なスレッドがあります: 1 つの V8 スレッド (ユーザー JavaScript コードが実行されるイベント ループ)、1 つの libuv イベント ループ、およびスレッド プールに 4 つですよね?
そして、シェル(Ubuntu)でこれらのスレッドを確認するにはどうすればよいですか? ps -eLf |を使用します。grep ノード | grep -v grep では次の 2 つしか表示されませんでした。
ルート 16148 7492 16148 0 2 20:43 pts/26 00:00:00 ./bin/node /home/aaron/workspace/test.js
ルート 16148 7492 16149 0 2 20:43 pts/26 00:00:00 . /bin/node /home/aaron/workspace/test.js