计算双线程CPU的执行时间?

时间:2017-08-03 12:04:43

标签: multithreading operating-system cpu-architecture

  

给定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毫秒的答案?

1 个答案:

答案 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毫秒(这是最好的情况),但这并不适合这种情况。