1. 程式人生 > >單核多執行緒與多核多執行緒的區別---總結

單核多執行緒與多核多執行緒的區別---總結

在單核時代,多執行緒就有很廣泛的應用,這時候多執行緒大多用於降低阻塞(意思是類似於

while(1)

{

if(flag==1)

break;

sleep(1);

}

這樣的程式碼)帶來的CPU資源閒置,注意這裡沒有浪費CPU資源,去掉sleep(1)就是純浪費了。

阻塞在什麼時候發生呢?一般是等待IO操作(磁碟,資料庫,網路等等)。此時如果單執行緒,CPU會幹轉不幹實事(與本程式無關的事情都算不幹實事,因為執行其他程式對我來說沒意義),效率低下(針對這個程式而言),例如一個IO操作要耗時10毫秒,CPU就會被阻塞接近10毫秒,這是何等的浪費啊!要知道CPU是數著納秒過日子的。

所以這種耗時的IO操作就用一個執行緒Thread去代為執行,建立這個執行緒的函式(程式碼)部分不會被IO操作阻塞,繼續幹這個程式中其他的事情,而不是乾等待(或者去執行其他程式)。

同樣在這個單核時代,多執行緒的這個消除阻塞的作用還可以叫做“併發”,這和並行是有著本質的不同的。併發是“偽並行”,看似並行,而實際上還是一個CPU在執行一切事物,只是切換的太快,我們沒法察覺罷了。例如基於UI的程式(俗話說就是圖形介面),如果你點一個按鈕觸發的事件需要執行10秒鐘,那麼這個程式就會假死,因為程式在忙著執行,沒空搭理使用者的其他操作;而如果你把這個按鈕觸發的函式賦給一個執行緒,然後啟動執行緒去執行,那麼程式就不會假死,繼續相應使用者的其他操作。但是,隨之而來的就是執行緒的互斥和同步、死鎖等問題,詳細見有關文獻

http://blog.csdn.net/delacroix_xu/article/details/5928121

相關推薦

Tensorflow學習筆記:變數作用域、模型的載入儲存、執行佇列實現執行讀取樣本

# tensorflow變數作用域     用上下文語句規定作用域     with tf.variable_scope("作用域_name")         ......

java執行併發之建立執行的幾種方式

1、繼承Thread類方法 public class Demo1 extends Thread{ @Override public void run() { //判斷標誌 while(true) { System.out.println(get

執行高併發(二)執行安全

上一篇學習了多執行緒的一些基礎知識:多執行緒的基本概念,及建立和操作多執行緒。內容相對簡單,但多執行緒的知識肯定不會這麼簡單,否則我們也不需要花這麼多心思去學習,因為多執行緒中容易出現執行緒安全問題。 那麼什麼是執行緒安全呢,定義如下: 當多個執行緒訪問同一個物件時,如果不用考慮這些執行緒在執行時環境下的

線程CPU和線程GIL

程序 數據完整性 多核 nbsp 對象 解釋器 一是 IT 數量 多線程與CPU:1.單核CPU CPU密集型的程序(做計算操作的程序) 單線程即可( 此時的任務已經把CPU資源100%消耗了,就沒必要也不可能使用多線程來提高計算效率)2.單核CPU IO密集型的程序

一次性區分執行程序在程式執行中的關係

一直不能區分執行緒是CPU排程和分配的基本單位,程序是作業系統進行資源分配的最小單位的關係,下面這段話是從一片博文中摘抄的,讓我幾周以來的模糊認識一下子清晰起來,希望對大家理解有幫助,原博文地址在前一篇文章中已貼出,好文章讀起來真是受益匪淺,原文如下:  執行緒是CPU排程和分配的基本單位,一定

【Linux學習】pthread_create主執行建立的新執行之間退出關係

我們在一個執行緒中經常會建立另外的新執行緒,如果主執行緒退出,會不會影響它所建立的新執行緒呢?下面就來討論一下。 1、  主執行緒等待新執行緒先結束退出,主執行緒後退出。正常執行。 例項程式碼: #include "apue.h" #include <pthread

單核執行執行區別---總結

在單核時代,多執行緒就有很廣泛的應用,這時候多執行緒大多用於降低阻塞(意思是類似於 while(1) { if(flag==1) break; sleep(1); } 這樣的程式碼)帶來的CPU資源閒置,注意這裡沒有浪費CPU資源,去掉sleep(1)就是純浪費了。 阻塞在

淺談CPU、執行平行計算

0.前言 最近發覺自己部落格轉帖的太多,於是決定自己寫一個原創的。筆者用過MPI和C#執行緒池,參加過比賽,有所感受,將近一年來,對多執行緒程式設計興趣一直不減,一直有所關注,決定寫篇文章,算是對知識的總結吧。有說的不對的地方,歡迎各位大哥們指正:) 1.CPU發展趨勢 核

執行處理器 SMP 分析

首先分析執行緒的優勢: 1、提高程式的併發性(執行緒級並行,而非指令級並行); 2、一個程序內的所有執行緒共享所有資源; 3、切換執行緒的代價下; 4、互動式程式可以通過多執行緒方式改善響應時間。 多執行緒實現的方式: 1、程式採用多執行緒設計方案; 2、多核處理器為單一的

執行執行效率

1、多執行緒在單核和多核CPU上的執行效率問題的討論 多執行緒在單cpu中其實也是順序執行的,不過系統可以幫你切換哪個執行而已,其實並沒有快(反而慢)。多個cpu的話就可以在多個cpu中同時執行了。單核CPU時使用多執行緒,通常是有執行緒要處於等待狀態。而對於普通的進度條更

Objective-C高階程式設計:iOSOS X執行和記憶體管理

這篇文章主要給大家講解一下GCD的平時不太常用的API,以及文末會貼出GCD定時器的一個小例子。 需要學習的朋友可以通過網盤免費下載pdf版 (先點選普通下載-----再選擇普通使用者就能免費下載了)http://putpan.com/fs/cy1i1beebn7s0h4u9/ 1.G

[讀書筆記]iOSOS X執行和記憶體管理 [GCD部分]

3.2 GCD的API 蘋果對GCD的說明:開發者要做的只是定義想執行的任務並追加到適當的Dispatch Queue中。 “Dispatch Queue”是執行處理的等待佇列。通過dispatch_async函式等API,在Block

執行高併發基礎知識

一、概覽 多執行緒主要知識點: 執行緒安全、執行緒封閉、執行緒排程、同步容器、併發容器、AQS、J.U.C 高併發解決方案: 擴容、快取、佇列、拆分、服務降級與熔斷、資料庫切庫、分庫分表 二、併發 概念: 同時擁有兩個或者多個執行緒,如果程式在單核處理器上執行

程序、執行執行

一、說說概念 1、程序(process) 狹義定義:程序就是一段程式的執行過程。 廣義定義:程序是一個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。 簡單的來講程序的概念主

執行基礎7 執行併發庫

多執行緒與併發庫 BlockingQueue佇列 BlockingQueue,如果BlockQueue是空的,從BlockingQueue取東西的操作將會被阻斷進入等待狀態,直到BlockingQueue進了東西才會被喚醒.同樣,如果BlockingQueue是滿的,任何試圖往裡存東西的操作

2017.10.12 C#執行非同步的區別

最近在寫個多執行緒處理的程式,又重新溫習了一下相關知識,記錄在這裡。 C#多執行緒與非同步的區別 原文地址:http://kb.cnblogs.com/page/116095/ 多執行緒和非同步操作的異同   多執行緒和非同步操作兩者都可以達到避免呼叫執行緒阻塞的目的,從而提高軟體

基於VB 實時資料採集處理的執行設計

0 引言  在多種視覺化程式語言中,VB 具有介面設計功 能強的特點 ,選擇它作為開發平臺 ,可以快速地建立 應用程式。該特點使其在測控系統的資料採集和處 理中應用比較廣泛 ,但是在資料實時處理時 ,往往出 現執行操作介面的選單命令明顯反應變慢 ,操作不 便 ,實時監控資料時引發了程式阻塞。

Qt 筆記:執行介面元件的通訊(上)

是否可以在子執行緒中建立介面元件? class TestThread : public QThread { Q_OBJECT protected: void run() { QWidget w; w.show();

Qt:筆記:執行介面元件的通訊(下)

子執行緒能夠更改介面元件狀態的本質是什麼? -子執行緒發射訊號通知主執行緒介面更新請求;主執行緒根據具體訊號遺蹟訊號引數對介面元件進行修改。 是否有其他間接的方式可以讓子執行緒更新介面元件的狀態? 解決方案 - 傳送自定義事件 -自定義事件類用於描述介面更新細節 -在主視窗類中重

python執行————8、執行程序對比

#多程序程式設計 #耗cpu的操作,用多程序程式設計,對於io操作來說,使用多執行緒程式設計,程序切換代價要高於執行緒 import time from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor,as_compl