簡說java程序中多線程、並發與單

java天生支持多線程——^_^.

下面簡單理解下所謂多線程、併發與單核、多核的問題

簡說java程序中多線程、併發與單/多核關係

1,線程與進程,系統之間的關係.

一個進程由於要處理很多的任務才能夠完成一個強大的功能,但是不能僅僅只是放在一個路線上邊來做,那樣子將會很慢的,所以就有了將任務可劃分為很多的片段放在了線程中,有很多的路執行了(屬於併發,主要就是在一條線程在阻塞了的時候及時的將執行權交給了另外的線程,提高了利用率),所以他是提高效率的代名詞.同理是應用與系統和進程之間的關係的.

2,單核多核與併發並行之間的關係.

單核cpu上邊有很多的線程,但是由於是單核只能是由線程調度器才來選運行那個線程,這就是併發,也就是說在任何的一個極小的時間段內是隻能處理一個線程中的任務的.

多核處理多線程同時存在併發和並行,這個不難理解的.

目前最流行的處理方式是多任務多線程多處理器.

3,單核為什麼要有併發.

主要就是在一條線程在阻塞(IO的時候等)了的時候及時的將執行權交給了另外的線程,提高了利用率,若是沒有阻塞的情況發生那麼在單核上邊進行併發是沒有意義的.即使單核在切換線程的時候也是浪費資源的但是相比較而言還是好,最起碼另一個阻塞了,我起碼得有一個返回鍵吧,我返回鍵可不能無法響應的.

4,併發的時候最基本的難點是什麼.

Java這種併發系統是會共享內存和IO資源的,所以最基本的地方實在協調多線程驅動的任務之間不能同時使用共享部分.

5,線程間運行機制.

Java中的線程機制是搶佔式的,表示調度機會週期性的中斷線程,將上下文環境切換到另外一個線程中,從而為每一個線程都提供時間片.協作式系統有兩大優勢:上下文環境的切換比搶佔式系統所浪費的資源要消耗低,同時執行的線程數量理論上沒有上限的.所以我們應該儘量在線程中使用讓步語句.


分享到:


相關文章: