問題タブ [tasklet]
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.
linux-kernel - SoftIRQとタスクレットの違い
Linuxの割り込み処理を研究していると、タスクレットとSoftIRQが「下半分」(優先度の低い作業)を実行する2つの異なる方法であることがわかりました。私はこれを理解しています(かなりの真の必要性)。
違いは、SoftIRQは再エンタラントですが、タスクレットは再エンタラントではありません。同じSoftIRQを異なるCPUで実行できますが、タスクレットの場合はそうではありません。
私はこれを表面から理解していますが、2つの機能の要件を理解できていません。どのような場合にこれらの機能を使用できますか?今タスクレットを使用し、次にSoftIRQを使用する必要があることを認識する方法。
また、タスクレットがSoftIRQで作成されるとはどういう意味ですか?私がLKMLで読んだ本の1つで、タスクレットの削除について議論がありました。なぜそのような機能を導入するのか、私は完全に混乱しましたか?近視眼的(犯罪を意味しない)?
これに関するポインタは大いに役立ちます。
c - タスクレットとワークキューの違いは何ですか
私は Linux デバイス ドライバーの初心者で、 と の正確な違いを知りたいと思っていtasklet
ますworkqueue
。次の疑問があります。
- 割り込み/プロセス コンテキストで実行する場合、割り込み、タスクレット、およびワークキューはどのカーネル スタックを使用しますか?
- タスクレットとワークキューはどの優先度で実行され、その優先度を変更できますか?
- 独自のワーク キュー リストを実装する場合、それを個別にスケジュール/優先順位付けできますか?
linux-kernel - irq ハンドラから Linux カーネル タスクレットに値を渡すにはどうすればよいですか?
単一のタスクレット関数によって処理される多くの割り込みがある Linux ドライバーがあります。
それらすべてに同じタスクレットを登録したいのですが、受信したirqに応じて動作を変更します。これはできますか?
あなたが知っている代替ソリューションはありますか?
DECLARE_TASKLET()
値が静的であり、irq ハンドラーによって渡されないため、これが機能しないことがわかっている間は、パラメーターを宣言することを提案しないでください。
tasklet - 間に割り込みが発生した場合、タスクレットの実行はどうなりますか
タスクレットについて私が知っていること:
- タスクレットは、すべての割り込みを有効にして実行されます。
- タスクレットは割り込みコンテキストで実行されます。
- 眠れない。
- アトミックな方法で実行されます。
- 次のティックより遅くスケジュールされることはありません。
私の質問:
- 下半分ではすべての割り込みが有効になっているため、タスクレットが実行されている間に割り込みが発生するとどうなりますか。(タスクレットの実行中に割り込みが無効になっている場合、タスクレットの利点は何ですか)?
- タスクレットが常に次のティックまで確実にスケジュールされるのはなぜですか?
- タスクレットは、優先度0(高優先タスクレット)と優先度6(通常タスクレット)のsoftirqというのが正しいでしょうか?
google-app-engine - ndb gae で常に非同期の ndb 操作を使用する
私は gae と ndb を使用して開発していますが、ndb の取得とクエリのために多くのコードを書かなければならないことがわかりました。場合によっては 2 つのバージョン (場合によっては 3 つ以上) が必要になります。
次のモデルとその中に関数があるとします。
ご覧のとおり、MainEnt には「同じ」(場合によってはそれ以上の) 結果を返す 3 つのメソッドがありますが、異なるコンテキストで使用されます。
1)同期機能は、結果を取得する必要がある場合にのみ使用され、その結果を取得することが唯一の「ndb操作」です。
2) 非同期関数は、結果を取得する必要がある場合にのみ使用されますが、重複させたい他の ndb クエリも実行します。
3)タスクレット非同期関数は、結果を取得する必要がある場合にのみ使用され、この結果の子エンティティを取得し、他のndb操作も実行する可能性があります。
あまりにも多くの関数を記述しているため、前の各状況で呼び出される非同期タスクレット関数のみを記述するのが正しいですか??
結果の同期が必要な場合でも、 get_created_by_async_tasklet を呼び出してから、関数によって返される未来で get_results を呼び出します。
これを行うことで、パフォーマンスやエラーが発生しやすいなどの不都合はありますか? すべてのクエリ、get などに常に ndb 非同期タスクレットを使用する方がはるかに簡単であることがわかりました...必要な場合にのみその結果を呼び出すか、それ以外の場合はさらに非同期操作を実行してから get_results を呼び出します。
これがよく説明されていることを願っています...
前もって感謝します!
python - 実行時にタスクレットを作成する
スタックレス Python を始めたばかりです。実行時、つまり を呼び出した後に、いくつかのタスクレットを作成しようとしていますstackless.run()
。この関数はメイン スレッドをブロックしないので、必要に応じて新しいタスクレットを作成できると思いました。そこで、タスクレットで実行される tasklet-creator 関数を作成することにしました。これは私が持っているものです:
このコードは、5 秒ごとに新しいタスクレットを作成し、それぞれが「Hello, {number of tasklet}!」と出力する必要があります。無限に (これも 5 秒ごとに)。予想される出力は次のとおりです。
しかし、コードを実行しても何も出力されません。
ここで何が問題なのですか?