java併發多面性

    編程問題中大部分都是能夠經過順序編程來解決。然而對於某些問題,若是可以並行地執行程序中的多個部分,則會變得很是方便甚至頗有必要,java

由於這些部分要麼看起來在併發地執行,要麼在多處理器環境下執行。(併發跟並行是兩個概念)web

1、什麼是併發數據庫

  在 操做系統中,併發是指一個時間段中有幾個程序都處於已啓動運行到運行完畢之間,且這幾個程序都是在同一個 處理機上運行,但任一個時刻點上只有一個程序在處理機上運行。
在關係數據庫中,容許多個用戶同時訪問和更改共享數據的進程。SQL Server 使用鎖定以容許多個用戶同時訪問和更改共享數據而彼此之間不發生衝突。

2、關於javaweb系統上的併發編程

  web系統是最多見的java應用系統之一,而基本的web庫類、servlet具備天生的多線程性,由於web服務器常常包含多個處理器,而併發是充分利用這些處理器的理想方式。服務器

即使是像servlet這樣看起來很簡單的狀況,你也必須理解併發問題,從而正確地使用它們。多線程

3、併發多面性併發

  併發編程使人疑惑的一個主要緣由是:使用併發時須要解決的問題有多個,而實現併發的方式也有多種,而且在這二者之間沒有明顯的映射關係(並且一般只具備模糊的界線)。負載均衡

用併發解決的問題大致上能夠分爲「速度」和「設計可管理性」兩種。性能

  一、更快的執行操作系統

  若是你想要一個程序運行的更快,那麼能夠將其斷開爲多個片斷,在單獨的處理器上運行每一個片斷。可是併發一般是提升運行在單個處理器上的程序和性能。

在單個處理器上運行的併發程序開銷確實應該比該程序的全部部分都順序執行的開銷大,由於其中增長了所謂的上下文切換的代價(從一個任務切換到另外一個任務)。

然而阻塞使這個問題發生了變化,若是某個任務或者線程阻塞了,致使不能繼續執行,那麼咱們能夠說這個任務或者線程阻塞了。若是沒有併發,那麼整個程序都將中止下來。

併發在此時就發揮它的做用,當一個任務阻塞的時候,程序中其餘任務還能夠繼續執行。(若是沒有任務阻塞,那麼單處理器機器上使用併發就沒有任何意義。)

  二、改進代碼設計

  在單cpu機器上使用多任務的程序在任意時刻仍舊只在執行一項工做,所以從理論上講,確定能夠不用任何任務而編寫出相同的程序。可是, 併發提供了一個重要的組織結構上的好處:你的程序設計能夠極大地簡化。

某些類型的問題,例如仿真,沒有併發的支持很難解決。

  解決這個問題的典型方式是使用協做多線程。java的線程機制是搶佔式,這表示調度機制會週期性地中斷線程,將上下文切換到另外一個進程,從而爲每一個線程都提供時間片,使得每一個線程都會分配到數量合理的時間去驅動它的任務。

在協做式系統中,每一個任務都會自動地放棄控制,這要求程序要有意識地在每一個任務中插入某個類型的讓步語句。

  協做式系統的優點是雙重的:上下文切換的開銷一般比搶佔式系統要低廉許多,並且對能夠同時執行線程數量在理論上是沒有限制。

  併發須要付出代價,包含複雜性你們,可是這些代價與在程序設計、資源負載均衡以及用戶方便使用方面相比,就顯得微不足道了。一般,線程是你可以建立更加鬆散耦合的設計,

不然,你的代碼中各個部分都必須顯式地關注那些一般能夠由線程來處理的任務。

 

最後:

JAVA的線程能夠在多個CPU上運行麼?

  "在具備多個處理器的機器上,每個處理器運行一個線程,能夠有多個線程並行運行。固然,若是線程的數目多於處理器的數目,調度器依然採用時間片機制"。

相關文章
相關標籤/搜索