タグ付けされた質問 「multithreading」

テクニック、構造、および安全性の問題を含むマルチスレッド関連の質問。

3
並列処理は並行性を意味しますが、その逆ではありませんか?
並列処理と並行処理は異なるものだとよく読みます。非常に多くの場合、回答者/コメント者は、まったく異なる2つのものであると書いているだけです。しかし、私の見解では、それらは関連していますが、その点について明確にしたいと思います。 たとえば、マルチコアCPUを使用していて、計算をx個の小さな計算(たとえば、fork / joinを使用)に分割し、それぞれを独自のスレッドで実行する場合、並列計算を実行するプログラムがあります(なぜならおそらく、任意の時点で複数のスレッドが複数のコア上で実行しようとして)されていると同時右のもの? たとえば、単にJavaを使用して、イベントディスパッチスレッドでUIイベントと再描画を処理し、自分で作成した唯一のスレッドを実行している場合、並行プログラム(EDT + GCスレッド+メインスレッド)がありますなど)が、並列ではありません。 これが正しいかどうか、および並列処理(「単一だがマルチコア」システムで)が常に並行性を意味するかどうかを知りたいのですが。 また、マルチスレッドプログラムはマルチコアCPUで実行されていますが、異なるスレッドがまったく異なる計算を実行している場合、「並列処理」を使用していると見なされますか?

6
なぜxUnitフレームワークではテストを並行して実行できないのですか?
今日のマシンで複数のコアを利用するために、テストを並行して実行できるxUnitフレームワークを知っていますか? それらのどれもそれを行わない場合(または非常に少ない場合)、おそらく理由があります...テストは通常​​非常に速いので、人々は単にそれらを並列化する必要性を感じませんか? (少なくとも一部の)テストを複数のスレッドに分散できないほど深いものはありますか?

4
クラスにスレッド/バックグラウンドワーカーを配置するのは「間違った」/悪い設計ですか?
Excel(C#および.Net 4)から読み取るクラスがあり、そのクラスには、UIの応答性を維持しながらExcelからデータをロードするバックグラウンドワーカーがあります。私の質問は次のとおりです。クラスにバックグラウンドワーカーを配置するのは悪い設計ですか。クラスなしでクラスを作成し、バックグラウンドワーカーを使用してそのクラスを操作する必要がありますか?この方法でクラスを作成することに関する問題は実際にはありませんが、それでも私は初心者なので、先に進む前に確認することを考えました。 私のコードが機能するので、これはスタックオーバーフローではないはずだと思うので、この質問がここで関連することを願っています。これは単なる設計上の問題です。

2
スレッドのスリープはどのように機能しますか?
スレッドを眠っているとき、実際には何が起こっていますか? スレッドをスリープ状態にすると、「現在のスレッドを一定期間一時停止」することがわかります。しかし、それはどのように機能するのでしょうか? Thread.sleep()が内部でどのように動作し、Thread.sleepが実際にどのように動作するかによると?: スリープ期間は、システム固有の細分性の影響を受けます 睡眠が妨げられている スレッドはCPUを離れ、その実行を停止します スレッドはスリープ中にCPU時間を消費していません これが何を意味するのかについての内部および基本的なメカニズムを完全に理解することはできません。 スレッド間の切り替えを担当するスケジューラと呼ばれるものがあることを理解しています。 ソースはこれがOS(またはハードウェア)によって異なることを示しているようで、ほとんどのスレッドには、CPUが別のスレッドに切り替える前にいくつかのアクションを実行するために1ミリ秒から60ミリ秒程度与えられます。 しかし、スレッドがスリープ状態になると(たとえば、数秒)、どのように再開しますか?タイマーが何らかの形で関与していると思いますが、それはマザーボードのクロックですか?CPUクロックレートに関連していますか? タイマーが含まれている場合でも、CPUは、スレッドに再び注意を払う時期になったことをどのようにして知るのでしょうか。常にスレッドをチェックインして、準備ができているかどうかを確認する必要はありませんか?効果的ではないことを、ポーリングは、したがって、種類のされたCPU時間を消費しますか? スレッドは言語固有にスリープしていますか、それともOSがスレッドを担当していますか、それともCPU固有のものですか? 誰かがスケジューラのようなものの基本的な説明とこれのすべての間にCPUが何をしているのかでこれを私に説明してくれませんか?

3
JavaベースのWebアプリケーションとスタンドアロンJavaアプリケーションのマルチスレッド化の違い
私はかなりJavaに慣れておらず、私の経験はWebコンテナ(私の場合はJboss)で実行されているWebベースのアプリケーションに限られています。 Webアプリケーションの場合、Webコンテナがマルチスレッドを処理すると言ってもいいですか?その場合、Webベースのアプリケーションに新しいトレッドを導入できますか?そうすることには利点があり、どのシナリオでそれを行う必要がありますか?

1
ベストプラクティスはポーリングしないことですが、スレッドがwait()を呼び出したときに内部でポーリングが発生しないのですか?
別のスレッドがタスクを終了したときにチェックしたいスレッドがあるとします。他のスレッドが終了したという通知を受け取るまでこのスレッドを待機させるwait()タイプの関数を呼び出す必要があることを読みました。そして、これは私たちが高価なポーリングを実行していないことを意味するため、これは良いことです。 しかし、とにかく内部で低レベルでポーリングが行われていませんか?つまり、スレッドをwait()にすると、カーネルは他のスレッドがいつ終了するかをチェックして、最初のスレッドに通知できるようにポーリングを実行しますか? 私はここで何かを見逃していると思いますが、誰かが私を啓発できますか?

2
マルチコアプロセッサでスレッド割り当てをプログラムする方法は?
たとえば、2つの異なるプロセッサコアで実行される2つの異なるスレッドを使用するプログラムを作成するなど、マルチコアプロセッサ上のスレッドを試してみたいと思います。 ただし、スレッドがどのレベルで異なるコアに割り当てられるかは明確ではありません。次のシナリオを想像できます(オペレーティングシステムとプログラミング言語の実装に依存)。 スレッドの割り当ては、オペレーティングシステムによって管理されます。スレッドはOSシステムコールを使用して作成され、プロセスがマルチコアプロセッサで実行されると、OSは異なるコアに異なるスレッドを自動的に割り当て/スケジュールしようとします。 スレッドの割り当ては、プログラミング言語の実装によって管理されます。スレッドを異なるコアに割り当てるには特別なシステムコールが必要ですが、プログラミング言語の標準スレッドライブラリは、その言語の標準スレッド実装を使用するときにこれを自動的に処理します。 スレッドの割り当ては明示的にプログラムする必要があります。私のプログラムでは、使用可能なコアの数を検出し、ライブラリ関数などを使用して異なるスレッドを異なるコアに割り当てるために、明示的なコードを記述する必要があります。 質問をより具体的にするために、WindowsまたはLinux上のJavaまたはC ++でマルチスレッドアプリケーションを作成したと想像してください。マルチコアプロセッサで実行すると、アプリケーションが魔法のように複数のコアを認識して使用しますか(すべてがオペレーティングシステムまたは標準のスレッドライブラリによって管理されるため)、または複数のコアを認識するためにコードを変更する必要がありますか?

2
アクターモデルの説明は正しいですか?
私が理解した場合、アクターモデルはオブジェクトモデルに似ていますが、いくつかの違いがあります。 すべてのオブジェクトはそれ自身の独立したスレッドを生成し、数千のオブジェクトがある場合でも問題はありません。 アクターは、関数を呼び出して戻り値を取得することによって対話するのではなく、メッセージを送受信することによって対話します。 そのモデルに違反しない場合、アプリは競合状態のリスクなしに、最大限の同時実行を使用します。 オブジェクト指向でできることはすべて、アクターを使用して行うことができますが、問題は、ここ数年でコーディングしたすべてがオブジェクト指向に基づいていたということです-しかし、移行は差し迫っています。 したがって、たとえば、3Dベクトルクラス/アクターを定義し、2つのインスタンスを作成し、それらの和演算を呼び出す必要があるとします。 オブジェクト指向: class V3d { constructor V3d(x,y,z) //bla float x,y,z; function sum(V3d b) { return V3d(x+b.x,y+b.y,z+b.z); } } //using: mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly drawPoint(mySum) //uses the result 俳優モデル: actor V3d { constructor V3d(x,y,z) //bla float x,y,z; loop { receive 'sum',b:V3d …

7
プログラミングにおけるスレッドの適切な使用とは何ですか?
多くのプログラムがプロセスごとに最大100を使用する一方で、プロセッサごとに1つのスレッドのみを使用することを推奨することを聞くのはうんざりです!例えば、いくつかの一般的なプログラムを取ります vb.net ide uses about 25 thread when not debugging System uses about 100 chrome uses about 19 Avira uses more than about 50 スレッド関連の質問を投稿するたびに、プロセッサごとに複数のスレッドを使用するべきではないことをほぼ毎回思い出し、上記のすべてのプログラムは単一プロセッサのシステムで台無しになっています。

7
誰でも私にスレッドを理解するのに役立つプロジェクトを書くことを提案できますか?
私は現在、C#の開発者であり、スレッドの理解がかなり不安定です。 これらのリンクは両方とも他の投稿で提案されています: http://www.yoda.arachsys.com/csharp/threads/ http://www.albahari.com/threading/ 基礎に戻って、このテーマに関するコンピューターサイエンスのテキストをいくつか見てください。 私が飛び込んでc#ライブラリを使用すると、構築するための強固な知識の基盤が本当になくなると思います。com sciの学生のように、このテーマをゼロから学び、C#ライブラリを使用する必要があると思います。 スレッドを学習するためのアプローチ、おそらくいくつかのリンクやプロジェクトのアイデアを誰でも提案できますか? 前もって感謝します! 編集、すべての返信に感謝します。一部の人は、本は良いアイデアかもしれないと言っていますが、誰かがそれを提案できますか?私は言語にとらわれない何かを好むでしょう。コンピューターサイエンスの学位でこのクラスがカバーされるクラスを誰もが知っていますか?Googleで無料のオンラインメモと割り当てを探しています。

5
計算に使用するコアの数 #coresまたは#cores -1?
私はやるべき大きな計算があります。すべてのコアを使用できますが、1つのコアを使用せずに使用しない理由はありますか?(計算CPUはIOなしのみ)。または、すべてのコアを利用しても、適切なコンテキストスイッチングを処理および実行することを知らないOSを過小評価していますか?

2
JREライブラリーのクラスは、外部/非JREアセンブリーからの監視可能および/または非同期読み取りをサポートしていますか?
他のプラットフォームのネイティブフロントエンドがオブジェクトを観察し、Observableパターンを利用できるように、クロスプラットフォームライブラリ(JREなど)を実装してオブジェクト参照でスレッドセーフな方法で操作するにはどうすればよいですか? 少しの背景-ほとんどのフロントエンドフレームワークで使用されるデータバインディングの概念があります。C#およびJavaでは、これは、複数のコントロールまたは「オブザーバー」がサブスクライブする可能性がある変更が発生したときにイベントを発生させる機能をクラスに与えるObservableトレイトに関連しています。このように、オブザーバーはリソースをポーリング/読み取りし続ける必要がなく、更新を比較します。 時間の経過とともにデータのリストを変更する分析エンジンで作業したいと思います。分析の実行中に、フロントエンドがこれらのリストを監視できるようになると便利です。これには、フロントエンドが、クロスプラットフォームのライブラリで書かれたオブジェクトを分析エンジンに渡し、そのオブジェクトに対してスレッドセーフな読み取りを行えることが必要だと思われます。または、ライブラリが可観測性の契約を満たします。 古いUnixスタイルのCLIエンジンでこれを処理する方法は、stdin / stdout / stderrを使用し、定期的にエンジンに更新を送信させることです。これには、標準のオーバーヘッドと、可能な場合は避けたいテキスト解析が必要です。

7
スレッドを使用して人々を先送りにする間違ったアイデアは何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 プログラムにスレッドを実装するのは難しいです。しかし、なぜそれが明らかに必要な場合でも、一部の人々がそれらを実装しないのはなぜですか。 例:プログラムはデータベースからデータセットをロードする必要があります。行うべきことは、接続を確立し、ワーカースレッドでデータベースからデータを取得してからGUIにロードし、GUIスレッドをユーザーに応答させることです。 。 しかし、いや、私はスレッドが邪悪で悪いものだと思っている人と話をしてきました。あるクラスのインストラクターがスレッドの使用に反対することを勧めたため、スレッドの使用をカバーしたくないと聞いたことがあります。何??? ハードウェアがマルチコアになると、スレッドをよりよく理解し、使用することを恐れないようにする必要があると思います。個人的には興味深いテーマだと思います。 スレッドについて聞いたことがあるのに、間違っていることは何ですか?

5
2人のユーザーが同じユーザー名で同じ瞬間に登録するのを防ぐ方法は?
何百万人ものユーザーが同時に登録しているため、登録をシリアル化できません。並行して登録する必要があります。 データベースにユーザー名「user1」が含まれていないとしましょう。2人のユーザーが「user1」に同時に登録しようとすると、それが受け入れられます。ただし、後で問題が発生します。これは起こらないはずです。 論理的な解決策を探しています。特定のものではありません。これを解決するためのアイデア。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.