問題タブ [single-threaded]

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.

0 投票する
1 に答える
385 参照

lisp - 単一のスレッドから、相手側がソケット ストリームを閉じたかどうかを確認するにはどうすればよいですか?

usocketのFAQでは、a から読み取って結果socket-streamを確認する方法が推奨されています。end-of-fileこれは、ソケットごとにアクティブなスレッドが 1 つある場合には機能しますが、同じスレッドで複数のソケットにサービスを提供しようとしている場合には満足できないようです。

次のようなものを検討してください

この演習では、実際に 4 つのクライアントが接続していると仮定します。1つのスレッドからそれらを提供する方法は次のようなものです

ただし、切断されたソケットは引き続き に戻りnil、メッセージのないアクティブなソケットからlistenの試みはブロックされますが、他のソケットにメッセージの準備ができていない場合でも、ミックス内に閉じられたソケットある場合はすぐに戻ります。 (ただし、どのソケットが返されたかを特定できないようです)。read wait-for-intput

しばらくクライアントが発言しておらず、3 番目のクライアントが切断された状況では、それを見つけてその特定のソケット接続を閉じる良い方法はないようです。read入力がないブロックであるため、最初の 2 つのクライアントが両方ともメッセージを送信するまでスレッドが待機することを除いて、それらを順番に読み取る必要があります。

私が念頭に置いているが、いくつかの決定的なグーグル検索の後に見つけられなかった解決策は、次のとおりです(好みの降順):

  1. ターゲットのストリームの読み取りがマーカーlistenを返す場合、それ以外の場合はそれと同等の関数が返されます。(上記をこの概念的な関数に置き換えると、残りの部分は書かれたとおりに機能します)tend-of-filelisten
  2. それ以外の場合はそれと同等の関数wait-for-inputは、トリップの原因となった閉じられたソケットのリストを返します。(この場合、閉じたソケットのリストを反復処理し、提案されたread手法でそれらが実際に閉じられていることを確認し、必要に応じて閉じたりポップしたりできます)
  3. それ以外は同等の関数wait-for-inputは、トリップの原因となった最初に閉じられたソケットを返します。(#2と同様ですが、反復ごとに非アクティブな接続を最大1つプルーニングするため、遅くなります)
  4. 各ソケット接続から入力を受信して​​からの経過時間を追跡し、一定期間非アクティブになった後は関係なくそれらを閉じます。(とにかくやりたいと思うかもしれませんが、これだけを行うと、必要以上に多くの切断された接続が保持される可能性があります)
  5. read-charインスタント タイムアウトでストリームからt取得しよう:eofとする関数。(自明ではないが致命的な方法で簡単に破れるように思われるため、これは最後の手段です)unread-charnil

また、これについて正確に間違った方法で考えている場合は、それも指摘してください。

0 投票する
1 に答える
97 参照

javascript - ブラウザは関数の実行中にイベントへの応答を停止し、「ドラガブル」を壊します

私はこのようなスライダーを持っています:

スライダーをドラッグ可能にするためにjQueryUIを使用しています。これは正常に機能します。

問題は、スライダーがセクションの境界(で示される)を越えるたびに関数を実行していることです:。この関数の実行には約30msかかります(DocumentFragmentを作成してドキュメントに挿入します)。この間、ブラウザーはイベントに応答しないため、jQuery UIはスライダーの位置の調整を停止し、ドラッグが途中で終了します(ユーザーはマウスボタンを離して新しいドラッグを開始する必要があります)。これにより、スライダーがぎくしゃくしてバグのある感じになります。

この問題の解決策はありますか?

編集:問題を示す簡単なフィドルを作成しました。ドラッグは、slow関数の実行中は基本的に一時停止しますが、その後再開することに注意してください。これにより、ドラッグイベントが短くなる原因となっている、より複雑なシナリオについて何かがあるのではないかと思われます(おそらく、DOM操作によってスライダーの位置が一時的に変化している可能性があります)。

編集:さらに調査した後、私は問題を理解することにずっと近づいています。DOM操作コードには、のような行が含まれています$('.droppable').remove()。これにより、一致する要素がバインドされているイベントハンドラーをデタッチし、関連するデータを削除した後、それらの要素がDOMから削除されます。代わりに使用する場合.detach()、動作は上記の単純なフィドルと同じです。クリーンアップ中に何か厄介なことが起こっています。

0 投票する
1 に答える
1701 参照

python - シングルスレッドで実行中の竜巻のノンブロッキング?

TornadoはノンブロッキングWebサーバーです。

ただし、すべての操作は単一のスレッドで実行されます。シングルスレッドで処理される場合、どのように非ブロッキングのままになりますか?

長時間の操作がある場合、新しいリクエストをブロックしますか?

Tornadoから大きなファイルをダウンロードするのは長いブロックプロセスですか?

私の理解が正確でない場合は、親切に訂正してください。

どうもありがとう

0 投票する
2 に答える
193 参照

c# - C#でリソースを解放する

[STAThread]C#で 実行されているプログラムがあります。

プログラムは定期的にクラスXのインスタンスを作成し、それらをリストに追加します。
一定期間が経過すると、これらのXのインスタンスが実行する必要のあるタスクが完了し、クラスのインスタンスは不要になります。
私はシングルスレッドで実行しており、これらのXのインスタンスの多くは同時に実行され、不要になったとしてもリソースを消費する可能性があるため、Xのインスタンスが完了したことがわかったらリソースを解放したいと思います。 、私のプログラムが遅くならないように。

私のコードは次のようになります:

私は疑問に思っています:

  1. 操作myList.RemoveAt(0)を実行すると、クラスXの最初のインスタンスのすべてのトレースがメモリから削除されます。
  2. これを行うためのより良い方法がある場合。

ありがとう!クリス

0 投票する
1 に答える
6642 参照

sql-server - ストアド プロシージャを強制的にシングル スレッドで実行する

マルチコア システムでストアド プロシージャを実行しています。マルチスレッドで実行されます。おそらく、クエリ内の何らかの原因により、cx_packet の待機とロックにより、一部のスレッドの実行が永久にハングします。シングルスレッド実行を強制する方法はありますか? (これが最善の解決策ではないことはわかっていますが、少なくともクエリがより適切に最適化されるまでは役に立ちます。)

0 投票する
1 に答える
999 参照

.net - シングルスレッドWindowsサービス(onStop)を適切に停止する方法は?

VS 2010 /.NET4.0で記述されたWindowsサービスがあります。

このサービスは、以下のコードスニペットのスキームに従っています。タイマーを使用して、数分ごとに目的の動作を実行します。数分ごとに実行される「望ましい動作」の要件は、現在、約10秒かかる作業に成長しています。

そのサービスには単一のスレッドしか必要ありません。複数のスレッドを作成する理由はありません。そのため、Windowsサービスをシングルスレッドと呼びました。

私が心配しているのは、誰かが管理コンソールを介してサービスを停止した場合、サービスが時折行っているその10秒間の作業の間にある可能性があるということです。

SOとサービスを停止する方法についていくつか読んだことがありますが、少し迷っています。WorkerThreadsが作成されることもあれば、ManualResetEventsが作成されることもありますが、これまで、Windowsサービスの最善の方法を完全に把握することはできませんでした。

10秒間の実行中に何らかのフラグを確認し、そのフラグが停止するように指示していない場合にのみ続行する必要があると考えています。そして、onStopメソッドでは、おそらく処理が適切に終了するまで待つ必要があります。

理論についてはこれだけです;)、しかし、以下のコードスニペットも考慮して、それからの私の最善の方法は何ですか?

皆さんありがとう!

0 投票する
1 に答える
2150 参照

java - シングルスレッドプログラムとマルチスレッドプログラム(経過時間の測定)

経過時間を測定する必要があるかどうかを知りたいのですが、それSingle Threaded Programは良いアプローチですか、それともMultithreading Programそのための良いアプローチです。

以下は私たちのサービスの時間を測定している私のシングルスレッドプログラムです-

このシングルスレッドプログラムから得られる出力は次のとおりです。5

これは1、呼び出しが戻ってきたことを意味します163 ms3呼び出しが戻ってきた42 msなど。

またMultithreaded program、経過時間を測定するためにも使用してみました。少数のスレッドでサービスを並行してヒットし、各スレッドがどれだけの時間を取っているかを測定することを意味します。

以下はそのためのコードでもあります-

そして、以下は私が上記のプログラムから得た結果です-

1回の呼び出しが176ミリ秒で戻ってきました。

だから私の質問は、マルチスレッドプログラムが上記のシングルスレッドプログラムと比較してはるかに時間がかかるのはなぜですか?マルチスレッドプログラムに抜け穴がある場合、誰かがそれを改善するのを手伝ってくれますか?

0 投票する
1 に答える
2031 参照

javascript - Javascript がマルチスレッド化されていない場合、非同期 Ajax キューイングを実装する理由はありますか?

私のphpサーバーに問題があります(私のコンピューターは唯一の接続です)。最初は、その理由の一部は ajax リクエストが多すぎるためだと考えていたので (キーストロークごとに ajax リクエストを実行するスクリプトを持っています)、キューへの ajax リクエストのフローを制御する設計を実装しました。以下は私のコードです:

実装:

次に、Javascript がマルチスレッドであることを知り、 John Resig (jQuery extra-ordinaire )

その場合、ここで紹介した関数は結果を生成しませんか? Javascript が既に要求をキューに入れているからです。奇妙なことは、それが劇的に変化するように見えることです. 私のサーバーはあまりクラッシュしません (想像の範囲を超えてそれを解決策と見なすわけではありません... ああ)、クラッシュして再起動した後、以前にキューに入れられた ajax リクエストが送信されます。サーバーがクラッシュすると、空中に消えます。

シングルスレッドの Javascript が非同期イベントをキューに入れる場合:

  1. Ajax リクエスト マネージャーまたはキューを使用する意味はありますか?
  2. コードが結果を生成するのはなぜですか?
0 投票する
3 に答える
907 参照

javascript - 再帰で setTimeout を使用して、ブラウザが複雑なプロセスで動かなくなるのを防ぐ方法

inefficientProcess()大量のメモリを消費するを使用する次のコードがあります。

私の目標は、何らかのsetTimeout(function(){...},0)手法を使用して、コードの実行中にブラウザーがスタックしないようにすることです。

setTimeout で動作するようにコードを変更するにはどうすればよいですか?

私の目標はもちろん、重い計算を実行するときにブラウザーがクラッシュするのを避ける方法を学ぶことです。