1. 程式人生 > >理解多執行緒的實際意義和優勢

理解多執行緒的實際意義和優勢

首先理解並行和併發的區別:

並行:指在同一時刻,有多條指令在多個處理器上同時執行;

併發:指在同一時刻,只能有一條指令執行,但多個程序指令被快速輪換執行,使得在巨集觀上具有多個程序同時執行的效果。

大部分作業系統都支援多程序併發執行:程式設計師一邊使用開發工具寫程式碼,一邊開啟網頁在查API,同時還開著網易雲聽歌······還沒完,每臺電腦執行時還有大量的底層支撐性程式在後臺執行······這些程序看上去像是在同時工作。真相是,對於一個CPU而言,他在某個時間點只能執行一個程式,即一個程序,其實CPU是不斷地在這些程序間輪換執行的,由於執行速度相對人的感覺來說過快,所以我們感覺不到而已。

而我們要談的多執行緒
,則是多程序概念的擴充套件。

作業系統可以同時執行多個任務,每個任務就是程序;程序可以同時執行多個任務,每個任務就是執行緒。

執行緒是程序的組成部分,一個程序可以擁有多個執行緒,一個執行緒必須有一個父程序。執行緒可以擁有自己的堆疊,自己的程式計數器和自己的區域性變數,但不擁有系統資源,它與父程序的其他執行緒共享該程序所擁有的全部資源。因為多個執行緒共享父程序裡的全部資源,因此程式設計更加方便,但必須更加小心。

執行緒可以完成一定的任務,可以與其他執行緒共享父程序中的共享變數及部分環境,相互之間協調來完成程序所要完成的任務。

執行緒是獨立執行的,它並不知道程序中是否還有其他執行緒存在。執行緒的執行時搶佔式

的,也就是說,當前執行的執行緒在任何時候都可能被掛起,以便另外一個執行緒可以執行。

從邏輯角度來看,多執行緒存在於一個應用程式中,讓一個應用程式中可以有多個執行部分同時執行,但作業系統無須將多個執行緒看作多個獨立的應用,對多執行緒實現排程和管理以及資源分配。執行緒的排程和管理由程序本身負責完成。

總結起來,使用多執行緒程式設計具有以下優點:

(1)程序之間不能共享記憶體,但執行緒之間可以,且十分容易

(2)系統建立程序是需要為該程序重新分配系統資源,但建立執行緒則代價小得多,因此使用多執行緒來實現多工併發比多程序的效率高。

多執行緒的實際應用:

(1)一個瀏覽器必須能同時下載多個圖片

(2)一個web伺服器必須能同時相應多個使用者請求

(3)Java虛擬機器本身就在後臺提供了一個超級執行緒來進行垃圾回收

相關推薦

理解執行實際意義優勢

首先理解並行和併發的區別:並行:指在同一時刻,有多條指令在多個處理器上同時執行;併發:指在同一時刻,只能有一條指令執行,但多個程序指令被快速輪換執行,使得在巨集觀上具有多個程序同時執行的效果。大部分作業系統都支援多程序併發執行:程式設計師一邊使用開發工具寫程式碼,一邊開啟網頁

《Java》Java“定時器執行實際應用——執行同步

一、任務目標     將任務<Java“定時器和多執行緒”實際應用——定時器配合多執行緒>中的兩個執行緒修改為互斥的,以保證兩個執行緒不會同時對此類屬性x進行修改。   二、執行緒同步機制     在Java中提供了同步機制,可以有效地防止資源衝突。同步機制使用 sy

《Java》Java“定時器執行實際應用——定時器配合執行

一、任務目標     完成一個java application應用程式,此應用程式公共類有一個double型類屬性(變數)x,初始值為0;在應用程式主程序中新開兩個執行緒,這兩個執行緒都進行死迴圈;第1個執行緒每隔300ms啟用一次,令類屬性x自加1.0並輸出顯示;第2個執行緒每隔400

精選執行面試題目答案,對執行理解不是很到位的快來看了~

多執行緒,相信對於很多小白來說是噩夢一般的東西吧,別怕,接下來我們就來把多執行緒的一些面試題一一解讀,希望讀完這篇文章之後,能夠對多執行緒有一個更深入的瞭解。 1. 多執行緒使用的優缺點? 優點: (1)多執行緒技術使程式的響應速度更快 (2)當前沒有進行處理的任務可以將處理器時間讓

理解執行(四)--原子量原子操作

原子量 互斥量可以對於共享變數的訪問進行加鎖,可以保證對臨界區的互斥訪問,但加鎖總是繁瑣的,所以提供了更簡單的共享變數保護訪問的操作,原子量和原子操作。 原子量的構造 原子量包含在#include 中,對於基本型別,我們可以這樣定義原子變數 std::atomic_b

執行中joindetach方法的理解

thread.Join把指定的執行緒加入到當前執行緒,可以將兩個交替執行的執行緒合併為順序執行的執行緒。比如線上程B中呼叫了執行緒A的Join()方法,直到執行緒A執行完畢後,才會繼續執行執行緒B。 join是阻塞當前執行緒,並等待object對應執行緒結束,

iOS 開發執行及其程序執行的介紹理解

iOS開發多執行緒篇—多執行緒簡單介紹 一、程序和執行緒 1.什麼是程序 程序是指在系統中正在執行的一個應用程式 每個程序之間是獨立的,每個程序均執行在其專用且受保護的記憶體空間內 比如同時開啟QQ、Xcode,系統就會分別啟動2個程序 通過“活動監視器”可以檢視Mac系統中所開啟的程序 2.什

你怎麼理解執行執行的區別

程式、程序、執行緒程式:由原始碼生成的可執行應用。 (例如:QQ.app)程序:一個正在執行的程式可以看做一個程序,(例如:正在執行的QQ警示一個勁曾),程序擁有獨立執行所需要的全部資源執行緒:程式中獨立執行的程式碼段。(例如:接收QQ訊息的程式碼)一個程序是由一或多個執行緒

關於執行中同步非同步的理解

執行緒同步:就是多個執行緒同時訪問同一資源,必須等一個執行緒訪問結束,才能訪問其它資源,比較浪費時間,效率低 執行緒非同步:訪問資源時在空閒等待時可以同時訪問其他資源,實現多執行緒機制 說起來比較抽象,我用程式碼嘗試了一下 //以非同步的方式提交佇列 -(

【原】對執行中WaitJoin的理解

對於,wait方法的解釋,有時候覺得很矛盾。呼叫某個物件的wait時,需要獲得該物件的鎖,在執行的時候又需要釋放該物件的所有鎖。這是問題一。 另外,在看Join的原始碼,會發現它利用了Wait來實現,但是它的實現原理是怎樣的呢? 這是問題二。 看下原始碼的英文描述:

C# 執行 Parallel.ForEach ForEach 效率問題研究及理解

      最近要做一個大資料dataTable迴圈操作,開始發現 運用foreach,進行大資料迴圈,並做了一些邏輯處理。在迴圈中耗費的時間過長。後來換成使用Parallel.ForEach來進行迴圈。 一開始認為, 資料比較大時,Parallel.ForEach肯定比 

執行學習---CallableFuture的使用(十)

1.Callable和Future適用於帶有返回結果的多執行緒 示例 public class CallAndFutureStudy { public static void main(String[] args) { ExecutorService threadPool

Java執行-44-靜態非靜態方法同步鎖物件是什麼

前面一篇,我們知道了synchronized關鍵字擴起來範圍的程式碼塊就可以實現同步,其實,在Java中,只需要在方法上加上synchronized關鍵字即可,就像加上static一樣。本篇來看看加上synchronized關鍵字修飾的非靜態和靜態方法的同步鎖物件是什麼。 1.非靜態同步鎖物

從零開始學執行之取消關閉(六)

小節 為什麼需要取消和關閉: 有時候我們希望在任務或執行緒自然結束之前就停止它們,可能因為使用者取消了操作,或者應用程式需要快速關閉. 取消和關閉的好處: 不會浪費資源執行一些沒用的操作、保證程式的正常退出. Java沒有提供任何機制,來安全地強迫執行緒停止手頭的工作.它提供中斷(執行緒

深入理解執行(四)—— Moniter的實現原理

在深入理解多執行緒(一)——Synchronized的實現原理中介紹過關於Synchronize的實現原理,無論是同步方法還是同步程式碼塊,無論是ACC_SYNCHRONIZED還是monitorenter、monitorexit都是基於Monitor實現的,那麼這篇來介紹下什麼是Monitor。

IOS執行之NSoperationGCD的比較

GCD是基於c的底層api,NSOperation屬於object-c類。iOS首先引入的是NSOperation,IOS4之後引入了GCD和NSOperationQueue並且其內部是用gcd實現的。 相對於GCD: 1,NSOperation擁有更多的函式可用,具體檢視api。

Java執行學習---Conditionwait、notify(十三)

1.問題:實現兩個執行緒交叉執行(Condition和wait、notify都可以實現) public class ConditionStudy { public static void main(String[] args) { //執行緒程式碼 BussinessTes

執行:OperationOperationQueue

多執行緒:實現方式Operation和OperationQueue Operation 生命週期 //都有共同特點,只讀屬性。 //是否準備 open var isReady: Bool { get } //是否執行 open var isExecuting: Boo

JAVA 執行(生產者消費者模式)

在生產-消費模式中:通常由兩類執行緒,即若干個生產者的執行緒和若干個消費者的執行緒。生產者執行緒負責提交使用者請求,消費者執行緒則負責具體處理生產者提交的任務,在生產者和消費者之間通過共享記憶體快取區進行通訊。 主要構成: provider:生產者執行緒負責生產資料 consume

java:執行(獲取名字設定名字)

* 1.獲取名字     * 通過getName()方法獲取執行緒物件的名字 * 2.設定名字     * 通過建構函式可以傳入String型別的名字  package com.heima.threadmethod; p