给定3个程序P0,P1,P2和两个CPU,每个CPU有2个线程。程序的运行时间分别为5,10和20毫秒。执行所有3个程序需要多长时间?假设它们不会更改CPU并且在执行期间不会阻塞。
我的答案是20毫秒,因为无论我们如何组织CPU上的程序,它们都会以最慢的程序(P2)完成,因此20毫秒。但是,解决方案手册给出了答案20,25和30.谁能告诉我这个答案是怎么回事?
它说
如果P0和P2安排在同一个CPU上并且P1安排在另一个CPU上则需要25毫秒
问题是为什么,第一个CPU不应该花费P2时间(20毫秒)而第二个P1不应该花费P2并且给定的时间比较长并且两个CPU同时运行不应该是20毫秒的答案?
答案 0 :(得分:3)
p0 - 5 ms
p1 - 10 ms
p2 - 20 ms
情景1:
| P0 | | |
| P1 | | p2 |
\_____/ \____/
CPU0 CPU1
CPU0
15ms
完成这两项工作,而CPU1
将在p2完成之前运行20ms
,它们会并行运行,因此这两项工作都将完成在20ms
。
情景2:
| P2 | | |
| P0 | | p1 |
\_____/ \____/
CPU0 CPU1
完成这两项工作需要CPU0
25ms
,而CPU1
将会10ms
运行CPU1
并行运行,而10ms
将在CPU0
之后闲置{1}},15ms
需要额外25ms
才能完成。因此,| P2 | | |
| P1 | | p0 |
\_____/ \____/
CPU0 CPU1
。
场景3:
CPU0
完成这两项工作需要30ms
CPU1
,而5ms
会运行CPU1
同样,它们并行运行,所以5ms
会一直运行在CPU0
之后空闲,25ms
需要额外30ms
才能完成。因此,@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView view = (WebView) findViewById(R.id.web_view);
WebSettings webSettings = view.getSettings();
webSettings.setJavaScriptEnabled(true);
view.loadUrl("file:///android_asset/build/index.html");
}
。
请注意,根据您的问题,作业仍保留在计划运行的同一CPU上。如果一个作业需要20毫秒才能运行而另一个作业需要10毫秒才能运行,则两个作业都需要30毫秒才能完成。如果你的作业可以在同一个CPU的不同内核上运行,那么无论如何它都是20毫秒(这是最好的情况),但这并不适合这种情况。