ほとんどのNodeJSプログラマは、NodeJSのシングルスレッドイベントループをブロックするのが悪いことを知っています。たとえば、ファイルを読むときは、fs.readFileSyncの代わりにfs.readFileを使用するほうがよいことがわかっています。私の質問は、APIによって実行される基本的なタスクが本質的に同期している場合、最初にasyn APIを作成するにはどうすればいいですか?別の言葉では、fs.readFileSyncなどのAPIを作成し、イベントループスレッドを使用して基本のタスクを実行する方法はありますか?これを行うにはNodeJS & Javascriptの外に出なければなりませんか?nodeJS(またはブラウザ)用の非同期APIの作成
1
A
答えて
1
APIによって実行される 基本タスクが本質的に同期している場合、最初にasyn APIを作成する方法はありますか? (例えば
fs.readFile()
など)は、既存の非同期操作の
- ベースにそれを:Node.jsの中
、独自の非同期操作を作成するための次の選択肢があります。主な操作自体が同期していて、node.jsで同期的にしか実行できない場合、このオプションは明らかに問題を解決しません。
setTimeout()
、setImmediate()
、またはnextTick()
を使用してコードを小さな塊に分割し、他のものがあなたの操作とインターリーブし、他のものがCPUを共有するのをブロックしないようにします。これはCPUの使用を妨げるものではありませんが、他の操作とCPUの共有を可能にします。ここでは、他の操作がCPUを共有することをブロックしないチャンク内の配列を反復する例を示します:Best way to iterate over an array without blocking the UI上記の項目#1、#2、#3はすべてJavascriptから行うことができます。項目#4には、ネイティブコードプラグイン(ネイティブスレッドへのアクセス権を持つことができる)の作成が含まれます。私は本当にゼロからfs.readFileSync()
のようなAPIを作成するにはfs.readFileSync
をAPIの作成に取り掛かるか、あなたはオプション#3のいずれかを使用する必要がありますどのように別の単語は、(やる
他のプロセスでは非同期で結果を返す)またはオプション#4(ネイティブコードプラグインを介してnode.jsに組み込まれているよりも低いレベルでOSサービスにアクセスする)
関連する問題
- 1. 非同期nodejsモジュールのエクスポート
- 2. 非同期プログラミング(NodeJS)の使用
- 3. Djangoで作成されたAPIの非同期呼び出し
- 4. NodeJS非同期滝は常にnull
- 5. 非同期メソッドの作成方法は?
- 6. nodejsで非同期とQの約束
- 7. Web Apiの非同期コントローラ
- 8. 非同期のWeb APIエンドポイント
- 9. Google GeoChart非同期の作成
- 10. 非同期操作内の非同期操作
- 11. GAE Go - 非同期データストアAPI?
- 12. NDB非同期APIとget_or_insert_async
- 13. Reduxを使用したFacebook APIへの非同期リクエスト
- 14. バックボーンのトリガー()は同期または非同期ですか?
- 15. ASP.Net MVCで非同期レポートを作成
- 16. 非同期リクエストを作成する
- 17. 非同期呼び出し使用してNodeJS
- 18. Nodejsでredisとbluebirdで非同期待機を使用する
- 19. 別の非同期 `each`メソッド(NodeJS)の内部で非同期メソッド呼び出しを行う方法は?
- 20. ユニットテストの非同期操作
- 21. 動的に作成された非同期ポストバックボタンへの応答
- 22. HAアーキテクチャの非同期/ポーリングまたは同期
- 23. iPhone SDKの同期要求または非同期要求
- 24. Monoのスタンドアロン非同期Web API
- 25. Google APIの非同期バージョンですか?
- 26. サーブレット3.0 APIの非同期サポート
- 27. 非同期APIコールバック設計の質問
- 28. 非同期ループ内の非同期メソッド
- 29. ブラウザのレンダリングとJavaScriptの実行の同期/非同期の性質
- 30. Javascriptは同期(ブロッキング)または非同期(非ブロッキング)でデフォルトでは
1が利用できない場合、最も効率的です。 NodeJSを他の言語で書かれたモジュールと統合する最良の方法は何ですか?私は財務計算を行ういくつかのマルチスレッドJavaモジュールを持っています。私は、これらのモジュールをTCP/IPサーバにパッケージングし、NodeJSアプリケーションがTCP経由でサーバにアクセスすることを考えていました。それが最善の方法だと思いますか? – ptmoy2
@ ptmoy2 - これらのモジュールをTCP/IPサーバーにパッケージングすることは確かにその1つの方法です。インターフェイス全体が簡単に理解できるTCP/IPであるため実装するのはきれいです。私たちが議論し始めていなくても、最終的にはいくつかのベンチマークを必要とするであろうことが、「最良の」ものに依存するということは、選択肢の中で「最良の」方法が何であるかを評価することは、決定する特定のシナリオの – jfriend00
@ ptmoy2 - クエリを「別のTCPサーバーに置いて、それをTCPを介して許容可能なソリューションにアクセスしています」に変更する場合、その答えは通常「はい」です。 – jfriend00