CPUが一度に1つのスレッドしか実行できない以上、マルチスレッドの存在意義は何ですか?
1108 ワード
今日1篇の文章を見て、ついにずっとの疑惑を解除しました.テキストリンク:https://www.cnblogs.com/qingbafengliuxia/p/10171638.html
コードがあると仮定します
2つのスレッドAがあり、Bは同時にこのコードを実行し、Aスレッドが先にCPUによってスケジューリングされたと仮定するが、Aスレッドはブレークポイント1でタイムスライスが期限切れになり、このときAスレッドのコードは実行済みではないが、CPUはこのときBスレッドをスケジューリングし、Aスレッドがこのコードを実行したかどうかを管理しない.
次に、Bスレッドが現在実行済みであると仮定する(もちろん実行済みではないかもしれないが)、CPUはAスレッドをスケジューリングし、Aスレッドのブレークポイント1から実行を継続する(再実行ではなく、CPU切替時にスレッドのコンテキストを保存することに注意)
まとめると、CPU切替スレッドは、スレッドがコードを実行したかどうかにかかわらず、スレッドに割り当てられたタイムスライスが期限切れになったかどうかに関係し、タイムスライスが期限切れになるとスレッドが切替され、同時に発生します.
転載先:https://www.cnblogs.com/YJZJZQA/p/10734693.html
CPUの時間は、1つの時点ではなくタイムスライスで区切られており、CPUスレッドの切り替えによる問題が併発している。
コードがあると仮定します
if(i == 1) {
i++; // 1
system.out.print(i);
} // 2
2つのスレッドAがあり、Bは同時にこのコードを実行し、Aスレッドが先にCPUによってスケジューリングされたと仮定するが、Aスレッドはブレークポイント1でタイムスライスが期限切れになり、このときAスレッドのコードは実行済みではないが、CPUはこのときBスレッドをスケジューリングし、Aスレッドがこのコードを実行したかどうかを管理しない.
次に、Bスレッドが現在実行済みであると仮定する(もちろん実行済みではないかもしれないが)、CPUはAスレッドをスケジューリングし、Aスレッドのブレークポイント1から実行を継続する(再実行ではなく、CPU切替時にスレッドのコンテキストを保存することに注意)
まとめると、CPU切替スレッドは、スレッドがコードを実行したかどうかにかかわらず、スレッドに割り当てられたタイムスライスが期限切れになったかどうかに関係し、タイムスライスが期限切れになるとスレッドが切替され、同時に発生します.
転載先:https://www.cnblogs.com/YJZJZQA/p/10734693.html