1. 程式人生 > >既然CPU一次只能執行一個線程,那多線程存在的意義是什麽?

既然CPU一次只能執行一個線程,那多線程存在的意義是什麽?

繼續 兩個 多線程 clas .html pan 就會 既然 導致

今天看到了一篇文章,終於解除了一直的疑惑。 原文鏈接:https://www.cnblogs.com/qingbafengliuxia/p/10171638.html


CPU的時間是按時間片分的,而不是一個時間點,並發問題是由於CPU線程切換導致的。

  現在假設有一段代碼

if(i == 1) {
    i++;  //斷點1
    system.out.print(i);       
} //斷點2

  有兩個線程A,B同時執行這一段代碼,假設A線程先被CPU調度,然而A線程在斷點1處,時間片到期了,此時A線程的代碼並沒有執行完,但是CPU此時會調度B線程,並不會管A線程是不是執行完了這一段代碼。

  

  再接著假設B線程現在執行完了這一段代碼(當然也可能沒有執行完),CPU 現在就又會調度A線程,並且從A線程的斷點1處繼續執行(註意不是重新執行,CPU切換的時候保存了線程的上下文)

  

  總結一下:CPU切換線程並不會管你線程是否將代碼執行完,而是和分給線程的時間片是否到期有關,時間片到期了就會切換線程,並發也就由此產生了。

既然CPU一次只能執行一個線程,那多線程存在的意義是什麽?