問題タブ [event-loop]
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 - Cに単純な/例のイベント駆動型Webサーバーはありますか?
オンラインにはスレッドベースのWebサーバーの例がたくさんありますが、イベントループベースのWebサーバーの良い例を示すものは実際には見たことがありません(lighttpやnginxなどの非常に複雑なものではありません)。
いずれかがあります?そうでない場合、この種のサーバーを作成する方法を学ぶために、何を読んだり見たりする必要がありますか?(これには、Cでの非同期IOなどが含まれます)
特にPythonのような高級言語で、イベントループベースのプログラミングがどのように機能するかの基本をすでに理解していますが、Cで実装できる必要があります。
javascript - JavaScriptイベントループの質問
javascriptでイベントループがどのように機能するのだろうか、私はnode.jsを使用していますが、同じ質問がブラウザにも当てはまると思います。
setTimeout
いくつかの非同期呼び出しがあり ( or$.ajax
または またはとしましょうfs.readFile
)、しばらくするとイベントループが実行されますcallback
がcallback
実行されると、舞台裏で何が起こるでしょうか? 非同期のものを呼び出したときに使用したスタックを復活させますか?
実際には、コールバックが生きているコンテキスト/これは何ですか? そしてそれはどのように機能しますか?
編集:ありがとう、なるほど..もう1つ問題があります。イベントループはどのようにしてコールバックのスコープを「記憶」しますか?
events - 効率的なイベントループの実装?
重複の可能性:
基本的なイベントループをどのように実装しますか?
実際には言語固有の質問ではありません。イベントループの効率的な実装は何でしょうか?これまでのところ、私は次のようなものにしか遭遇していません。
これが最善の方法だとは思いません。睡眠時間が短すぎるとCPUを大量に消費し、長すぎるとアプリがかなり反応しなくなります。
それで、もっと良い方法はありますか?
ありがとう
event-handling - Python 3のイベントループの実装?
Python 3で利用できるイベントループライブラリ(またはバインディング)を知っている人はいますか?UNIXシステムだけでも大丈夫ですが、Windowsでもできるものがいいと思います。
ETA:イベントループシステムを書くのはそれほど難しいことではないことを私は理解しています。しかし、私は車輪の再発明をしたくありません(私たちは今でもそうしないことを奨励していますよね?;-))
これはサーバーアプリケーション用に計画されているので、GUIウィジェットツールキットなどに関連付けられていないものが必要なのは明らかです。
答えが「いいえ、ありません」の場合(おそらく、これが見つからないのは確かです)、Python3のlibev用のバインディングを作成する可能性があります。
javascript - Node.jsでこのjavascriptがブロックされるのはなぜですか?
Node.jsを使用した次の単純なhttpサーバーがあります。
ポート8000でローカルホストにカールすると、次のような期待どおりの結果が得られます。
しかし、最初のプロセスの実行中に別の端末からカールインしようとすると、コンソールがハングし、最初のプロセスが完全に終了するのを待ってから、同じ出力の受信を開始します。
私の理解では、これはコールバックを使用する非同期コードであるため、ノードはイベントループの次のティックで複数のリクエストを処理することで同期して複数のリクエストを処理できます。実際、私はRyanDahlがHelloWorldの例と似たようなことをしているビデオを見ました。サーバーをブロックしているコードには何が含まれていますか?
php - PHP - 「本当の」fascgiを行う方法はありますか?
私は fcgi 設定で perl と ruby を使用しており、php の大規模なコード ベースを mod_php から fcgi に移行することを計画していました。php サイトを見て、それらが fcgi をサポートし、5.3 には fcgi の使いやすさを向上させる fpm があることを確認しました。しかし、私はphpでイベントループの例を見つけることができませんでした-私は後でそれを探すと思っていました...まあ、それは後で、私はfcgiがfcgiであると仮定したので、私はこれを読みました:
http: //blog.milkfarmsoft.com/2006/06/fastcgi-in-php-the-way-it-could-be/
「PHP の fastcgi SAPI は、runloop を PHP アプリケーションに公開しませんが、代わりにそれ自体の内部に実装します。その結果、「終了時にすべてがクリーンアップされる」モードが残っており、何も事前に初期化する可能性がありません。 ."
オムフグ:(
このサイトは 1 日あたり数百万のページ ビューを取得し、fcgi への書き換えにより、数百万の php と mysql のオープン/ライブラリのセットアップと memcache のオープンなどが節約されるはずでした。
PHPで「本物の」fcgiを行う方法はありますか? アイデアをお寄せいただきありがとうございます。
winapi - ウィンドウが表示された後にコードを実行する
私は、イベントループ全体とそのようなものすべてを自分で実装しているWindowsアプリケーションに取り組んでいます(それには理由があります)。ある場所では、ウィンドウが表示された後にコードを実行する必要があります。通常、ウィンドウが作成されると、WM_CREATE メッセージが受信されたときに初期化が行われます。WM_SHOWWINDOW は、ウィンドウが表示される直前に送信されます。ただし、ウィンドウが初めて表示された直後にコードを実行する必要があります。ウィンドウが表示された後に送信された通知メッセージが見つからないようです。一つも無いのではないでしょうか?
もちろん、ロジックを実行したかどうかを示すブール値 (FirstRun) を保持し、WM_ACTIVATE を受信したときにブール値が TRUE の場合にコードを実行し、FirstRun を FALSE に設定して、コードが実行されないようにすることができます。次回は WM_ACTIVATE を受け取るのですが、これはちょっと不自然に思えます。
このレベルで win32 プログラミングを行ってから何年も経っているので、あまり覚えていません。ここで最善のアプローチは何ですか?
c++ - エラー スロットでイベント ループが開始されたときに ContentNotFoundError が発生すると、QNetworkReply がエラー信号を 2 回出力する
QtSDK 4.7.3を使用しています
私は(void test())でこれをやっています:
そしてもちろんスロット onError が呼び出されます:
onError スロットにメッセージボックス/イベントループがない場合、クラッシュは発生せず、すべてが機能します。しかし、そこにある場合、 m.exec() が呼び出されたときに onError スロットが再度呼び出されます。両方のメッセージ ボックスが閉じられ、関数 onError をそのままにしておくと、アプリケーションがクラッシュします。これが発生すると、アプリケーションはメモリの削除/解放を試みます。エラー「アクセス違反の読み取り場所」は役に立たず、コールスタックはQt dllの奥深くにあります。
私が確認し
たこと: 信号は 2 回接続されていません。
QApplication が exec 関数を呼び出す前後に test() を呼び出してみました。(重要ではない)。
HostNotFound のような別のエラーは、onError スロットを 2 回呼び出しません。
私のコードはすべてメインスレッドで実行されます。
一度だけ呼び出されるように onError スロットを切断しようとしましたが、それでもクラッシュします。
onError() のリクエストで abort を呼び出してみました。
同じ質問を Qt フォーラム ( post ) に投稿しました。
ここで何が起こっているのかを理解するのを手伝ってくれる人はいますか?
テストに使用するコードは次のとおりです。
contentnotfound.h
c - Ruby C 拡張機能: イベント ループを同時に実行する
Ruby C 拡張機能として単純なウィンドウ ライブラリを実装しています。Windows にはhandle_events!
、ネイティブ イベント ループに入るメソッドがあります。
問題は、ウィンドウごとに 1 つのイベント ループとメソッド ブロックが必要なことです。メソッドがすぐに戻り、ループが別のスレッドで実行されるようにしたいと思います。これを達成するための最良の方法は何ですか?
rb_thread_call_without_gvl
イベント ループ関数rb_thread_call_with_gvl
を呼び出すために使用してから、s であるウィンドウのコールバックを呼び出すために使用してみましたProc
。完全なソース コードはここにあります。
それでも機能しますが、意図したとおりではありません。メソッドはまだブロックされています。これは Ruby のスレッド モデルでも可能ですか?
javascript - javascriptでノンブロッキングforループを書く最もクリーンな方法は何ですか?
それで、私は頭の体操について考えていました - 何らかの理由でノード js で反復する必要がある大きなオブジェクトがあり、それを行っている間、イベント ループをブロックしたくない場合はどうすればよいでしょうか?
これは私の頭の一番上にある例です。私はそれがはるかにきれいになると確信しています:
乱雑になる他の理由があると確信していますが、 setInterval 0 は実際には 0 ミリ秒ごとに実行されるわけではないため、これは通常の for ループよりも遅く実行されますが、多くのループを作成する方法がわかりませんより高速な process.nextTick。
私のテストでは、ネイティブの for ループ (hasOwnProperty() チェックを使用して同じ情報をログに記録) では 4 ミリ秒かかるのに対し、この例の実行には 7 ミリ秒かかることがわかりました。
では、node.js を使用してこの同じコードを記述する最もクリーンで最速の方法は何ですか?