1. 程式人生 > >前臺執行緒與後臺執行緒的區別

前臺執行緒與後臺執行緒的區別

.Net的公用語言執行時(Common Language Runtime,CLR)能區分兩種不同型別的執行緒:前臺執行緒和後臺執行緒。這兩者的區別就是:應用程式必須執行完所有的前臺執行緒才可以退出;而對於後臺執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後臺執行緒在應用程式退出時都會自動結束。

前臺執行緒和後臺執行緒的區別和聯絡:
1、後臺執行緒不會阻止程序的終止。屬於某個程序的所有前臺執行緒都終止後,該程序就會被終止。所有剩餘的後臺執行緒都會停止且不會完成。
2、可以在任何時候將前臺執行緒修改為後臺執行緒,方式是設定Thread.IsBackground 屬性。
3、不管是前臺執行緒還是後臺執行緒,如果執行緒內出現了異常,都會導致程序的終止。

4、託管執行緒池中的執行緒都是後臺執行緒,使用new Thread方式建立的執行緒預設都是前臺執行緒。

說明:   

        應用程式的主執行緒以及使用Thread構造的執行緒都預設為前臺執行緒


通過BeginXXX方法執行的執行緒都是後臺執行緒。

       執行緒池執行緒也就是使用 ThreadPool.QueueUserWorkItem()和Task工廠建立的執行緒都預設為後臺執行緒


前臺執行緒和後臺執行緒適合的場合

       通常,後臺執行緒非常適合於完成後臺任務,應該將被動偵聽活動的執行緒設定為後臺執行緒,而將負責傳送資料的執行緒設定為前臺執行緒,這樣,在所有的資料傳送完畢之前該執行緒不會被終止。
一般前臺執行緒用於需要長時間等待的任務,比如監聽客戶端的請求;後臺執行緒一般用於處理時間較短的任務,比如處理客戶端發過來的請求資訊。



執行緒的優先順序


   在windows上執行的執行緒在執行了一定時間(一個時間片)後,windows將會進行“排程”,給執行緒指定優先順序,可以影響這個排程。

   windows按照優先順序的高低選擇程式開始執行,也就是說如果存在一個優先順序是25的執行緒能夠執行,那麼windows將不會呼叫優先順序為24的執行緒。但是windows是一種“搶佔式”的作業系統(在windows上執行的執行緒能夠在任何時候被搶佔),如果一個具有較高優先順序的執行緒準備好執行,並且當前執行的是較低優先順序的執行緒,windows將迫使較低優先順序執行緒停止執行,開始執行較高優先順序的執行緒。

   由於windows上執行緒呼叫是(籠統的講)通過執行緒的優先順序來實現的,那麼如果我們想使我們的程式能夠被儘量多的排程,就需要設定執行緒的優先順序, 顯示在Thread類中,可以設定Priority屬性,以影響執行緒的基本優先順序。Priority屬性需要一個ThreadPriority列舉定義的值。     
       Highest > AboveNormal >  Normal >  BelowNormal > Lowest

相關推薦

什麼是執行 前臺執行後臺執行區別

一個程式執行起來都會生成一個程序,每個程序都有一個預設的執行緒,這個執行緒叫做主執行緒,這個主執行緒又稱為UI執行緒。 .net環境中使用thread建立的執行緒預設情況下是前臺執行緒,即執行緒屬性IsBackground=false,在程序中,只要有一個前臺執

前臺執行後臺執行區別

.Net的公用語言執行時(Common Language Runtime,CLR)能區分兩種不同型別的執行緒:前臺執行緒和後臺執行緒。這兩者的區別就是:應用程式必須執行完所有的前臺執行緒才可以退出;而

C# 前臺執行後臺執行

由於時間片的原因,雖然所有執行緒在微觀上是序列執行的,但在巨集觀上可以認為是並行執行。 執行緒有兩種型別:前臺和後臺。我們可以通過執行緒屬性IsBackground=false來指定執行緒的前後臺屬性(預設是前臺執行緒)。 區別是:前臺執行緒的程式,必須等所有的前臺執行緒執行完畢後才能

關於redis的單執行後臺執行的原始碼分析

前言: 通常大家都會說redis是單執行緒的,這個理解其實也沒錯。 redis的命令處理基本上都是單執行緒處理的,除了個別任務會fork子程序進行處理。 分析版本:redis 3.0.7 其實r

Android中UI執行後臺執行互動設計的5種方法

我想關於這個話題已經有很多前輩討論過了。今天算是一次學習總結吧。 在android的設計思想中,為了確保使用者順滑的操作體驗。一些耗時的任務不能夠在UI執行緒中執行,像訪問網路就屬於這類任務。因此我們必須要重新開啟一個後臺執行緒執行這些任務。然而,往往這些任務最終又會直

前臺執行後臺執行區別執行池的優缺點和使用場景

1.執行緒的和程序的關係以及優缺點 windows系統是一個多執行緒的作業系統。一個程式至少有一個程序,一個程序至少有一個執行緒。程序是執行緒的容器,一個C#客戶端程式開始於一個單獨的執行緒,CLR(公共語言執行庫)為該程序建立了一個執行緒,該執行緒稱為主執行緒。例如當我們建立一個C#控制檯

執行程序的總體區別

程序和執行緒的總體區別 程序 什麼是程序? 程式的一個執行例項 正在執行的程式 核心觀點:擔當分配系統資源(cpu時間或記憶體)的實體。 程序就是一個程式在一個數據集上的一次動態執行過程。 程序由以下三部分組成: 1、程式:我們編寫的程式用來描述程序

python 程序、執行協程的區別

簡單總結 程序是資源分配的單位 執行緒是作業系統排程的單位 程序切換需要的資源很最大,效率很低 執行緒切換需要的資源一般,效率一般(當然了在不考慮GIL的情況下) 協程切換任務資源很小,效率高 多程序、多執行緒根據cpu核數不一樣可能是並行的,但是協程是在一個執行緒中 所以是併發 程序:一個執行

Python 執行前臺執行後臺執行生命週期

import threading import time import win32api #引用系統函式 class Mythread(threading.Thread): #繼承threading.Thread def run(self): #run重寫,

Android的UI設計後臺執行互動

本文將討論Android應用程式的執行緒模型以及如何使用執行緒來處理耗時較長的操作,而不是在主執行緒中執行,保證使用者介面(UI)的流暢執行。 本文還將闡述一些使用者介面(UI)中與執行緒互動的API。 UI使用者介面執行緒當應用程式啟動時,系統會為應用程式建立一個主執行緒

執行多程序的區別選擇

魚還是熊掌:淺談多程序多執行緒的選擇 關於多程序和多執行緒,教科書上最經典的一句話是“程序是資源分配的最小單位,執行緒是CPU排程的最小單位”,這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這麼簡單了,選的不好,會讓你深受其害。 經常在網路上看到有的XDJM問“多程序好

執行開發(1):主執行前臺執行後臺執行,守護執行,子執行,託管執行的關係

1.主執行緒 當一個程式啟動時,就有一個程序被作業系統(OS)建立,與此同時一個執行緒也立刻執行,該執行緒通常叫做程式的主執行緒(Main Thread),因為它是程式開始時就執行的,如果你需要再建立執行緒,那麼建立的執行緒就是這個主執行緒的子執行緒。每個程序至少都有一個

網路程式設計中多執行多程序的區別

1、程序:子程序是父程序的複製品。子程序獲得父程序資料空間、堆和棧的複製品。2,執行緒:相對與程序而言,執行緒是一個更加接近與執行體的概念,它可以與同進程的其他執行緒共享資料,但擁有自己的棧空間,

python多執行多程序及其區別

個人一直覺得對學習任何知識而言,概念是相當重要的。掌握了概念和原理,細節可以留給實踐去推敲。掌握的關鍵在於理解,通過具體的例項和實際操作來感性的體會概念和原理可以起到很好的效果。本文通過一些具體的例子簡單介紹一下python的多執行緒和多程序,後續會寫一些程序通訊和執行緒通訊的一些文章。 python多執行緒

程序、執行執行

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

Unity子執行執行互動(委託方式)

using System; using System.Collections; using System.Collections.Generic; using System.Threading; using UnityEngine; /// <summary> /// 子執行緒與主執行

python大佬養成計劃----執行執行

建立執行緒 一個程序必有一個執行緒,程序也可由多個執行緒組成,但有一個執行緒為主執行緒。若一個任務需要花10Mins,當只有一個執行緒時,花費10Mins,當有十個執行緒時,可能就花費1Mins,所以多執行緒可以提升任務執行時間,提高工作效率。python裡與執行緒

MySQL---當Java遇上MySQL⑤---單執行執行下的事務

事務transaction 原子性(atomicity):組成事務處理的語句形成了一個邏輯單元,不能只執行其中的一部分。 一致性(consistency):在事務處理執行前後,資料庫是一致的(資料庫資料完整性約束)。 隔離性(isolcation):一個事務處理對另

序列化反序列化,執行執行

一、序列化 屬性類 public class FlyPig implements Serializable { private static String age = "269"; private S

C#.網路程式設計 Socket基礎(四) WPF系統Socket TCP協議 伺服器客戶端 不同型別檔案傳輸,同時解決UI執行工作執行的卡頓問題

一、簡介 雖然,本文的前面幾篇文章在WinForm中實現了Socket TCP協議 伺服器與客戶端 不同型別檔案傳輸,詳情見 但是,卻沒有在WPF中實現 Socket TCP協議 伺服器與客戶端 不同型別檔案傳輸。因此,本文將描述如何在WPF中實現該功能。