C#的線程技術及操作

????????每個正在操作系統上運行的應用程序都是一個進程一個進程可以包括一個或多個線程。線程是操作系統分配處理器時間的基本單元,在進程中可以有多個線程同時執行代碼。每個線程都維護異常處理程序、調度優先級和一組系統用于在調度該線程前保存線程上下文的結構。線程上下文包括為使線程在線程的宿主進程地址空間中無縫地繼續執行所需的所有信息,包括線程的CPU寄存器組和堆棧。

一、線程基礎

1.單線程?

????????單線程顧名思義,就是只有一個線程。默認情況下,系統為應用程序分配一個主線程,該線程執行程序中以Main()方法開始和結束的代碼。

2.多線程

????????需要用戶交互的軟件都必須盡可能快地對用戶的活動做出反應,以便提供豐富多彩的用戶體驗,但同時它又必須執行必要的計算以便盡可能快地將數據呈現給用戶,這時可以使用多線程來實現。

???????(1)多線程的缺點

要提高對用戶的響應速度并且處理所需數據以便幾乎同時完成工作,使用多線程是一種最為強大的技術,在具有一個處理器的計算機上,多線程可以通過利用用戶事件之間很小的時間段在后臺處理數據來達到這種效果。例如,通過使用多線程,在另一個線程正在重新計算同一應用程序中的電子表格的其他部分時,用戶可以編輯該電子表格。

單個應用程序域可以使用多線程來完成以下任務。

? 通過網絡與Web服務器和數據庫進行通信。
? 執行占用大量時間的操作。
? 區分具有不同優先級的任務。
? 使用戶界面可以在將時間分配給后臺任務時仍能快速做出響應。?

???????(2)多線程的缺點

使用多線程有好處,同時也有壞處,建議一般不要在程序中使用太多的線程,這樣可以最大限度地減少操作系統資源的使用,并可提高性能。

如果在程序中使用了多線程,可能會產生如下問題。

? 系統將為進程、AppDomain對象和線程所需的上下文信息使用內存。因此,可以創建的進程、AppDomain對象和線程的數目會受到可用內存的限制。
? 跟蹤大量的線程將占用大量的處理器時間。如果線程過多,則其中大多數線程都不會產生明顯的進度。如果大多數當前線程處于一個進程中,則其他進程中的線程的調度頻率就會很低。
? 使用許多線程控制代碼執行非常復雜,并可能產生許多bug。
? 銷毀線程需要了解可能發生的問題并對那些問題進行處理。

二、線程操作

????????Thread類位于System.Threading命名空間下,System.Threading命名空間提供一些可以進行多線程編程的類和接口。除同步線程活動和訪問數據的類(Mutex、Monitor、Interlocked和AutoResetEvent 等)外,該命名空間還包含一個ThreadPool類(它允許用戶使用系統提供的線程池)和一個Timer類(它在線程池的線程上執行回調方法)。

????????Thread類主要用于創建并控制線程、設置線程優先級并獲取其狀態。一個進程可以創建一個或多個線程以執行與該進程關聯的部分程序代碼,線程執行的程序代碼由ThreadStart委托或ParameterizedThreadStart委托指定。

????????線程運行期間,不同的時刻會表現為不同的狀態,但它總是處于由ThreadState定義的一個或多個狀態中。用戶可以通過使用ThreadPriority枚舉為線程定義優先級,但不能保證操作系統會接受該優先級。

????????Thread類的常用屬性及說明如表

屬 ???性

說 ???明

????ApartmentState

???狀取或設置此線程的單元狀態

????CurrentContex

獲取線程正在其中執行的當前上下文

????CurrentThread

???獲取當前正在運行的線程

????isAlive

獲取一個值,該值指示當前線程的執行狀態

????ManagedThreadld

獲取當前托管線程的唯一標識符

????Name

???獲取或設置線程的名稱

????Priority

獲取或設置一個值,該值指示線程的調度優先級

????ThreadState

獲取一個值,該值包含當前線程的狀態

????????Thread類的常用方法及說明如表

方 ??法

說 ??明

???Abort

在調用此方法的線程上引發ThreadAbortException,以開始終止此線程的過程。調用此方法通常會終止線程

???GetApartmentState

返回一個ApartmentState值,該值指示單元狀態

???GetDomain

返回當前線程正在其中運行的當前域

???GetDomainID

返回唯一的應用程序域標識符

???Interrupt

中斷處于WaitSleepJoin線程狀態的線程

???Join

阻止調用線程,直到某個線程終止時為止

???ResetAbort

取消為當前線程請求的Abort

???Resume

維續已掛起的線程

???SetApartmentState

在線程啟動前設置其單元狀態

???Sleep

將當前線程阻止指定的毫秒數

???SpinWait

導致線程等待由iterations參數定義的時間量

???Start

使線程被安排進行執行

???Suspend

掛起線程,或者如果線程已掛起,則不起作用

???VolatileRead

讀取字段值。無論處理器的數目或處理器緩存的狀態如何,該值都是由計算機的任何處理器寫入的最新值

???VolatileWrite

立即向字段寫入一個值,以使該值對計算機中的所有處理器都可見

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210686.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210686.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210686.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyQt6 水平布局Horizontal Layout (QHBoxLayout)

鋒哥原創的PyQt6視頻教程: 2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~共計41條視頻,包括:2024版 PyQt6 Python桌面開發 視頻教程(無廢話版…

[足式機器人]Part2 Dr. CAN學習筆記-自動控制原理Ch1-1開環系統與閉環系統Open/Closed Loop System

本文僅供學習使用 本文參考: B站:DR_CAN Dr. CAN學習筆記-自動控制原理Ch1-1開環系統與閉環系統Open/Closed Loop System EG1: 燒水與控溫水壺EG2: 蓄水與最終水位閉環控制系統 EG1: 燒水與控溫水壺 EG2: 蓄水與最終水位 h ˙ q i n A ? g h A R \dot{…

阿里云SLS采集jvm日志

一、背景 java應用部署在阿里云的k8s容器里,采集其日志的需求則是一個不可缺少的。而不同公司的jvm日志會存在很大的差異,所以本文僅以我的實際情況作一個示例,僅供有需要采集jvm日志的同學們一個參考。 我們打印的Jvm日志格式見下&#xf…

【干貨分享】KingIOServer與三菱PLC的通訊的應用案例

哈嘍,大家好,我是雷工! 最近一個項目涉及用KingIOServer采集三菱PLC數據,特記錄通訊過程方便備忘。 一、版本說明: 1、KingIOServer版本:3.7SP2 2、PLC型號:Q03UDV 和Q03UDE自帶以太網網口。…

Vue筆記(五)路由進階

導航守衛 vue-router提供導航守衛主要通過跳轉或**取消*的方式守衛導航。有很多方式植入路由導航中:全局的、單個路由獨享的,或者組件級的。 全局前置守衛:beforeEach。 每個守衛接收兩個參數: to:將要進入的目標fr…

VUE寶典之el-dialog使用

文章目錄 🍁前言🍁el-dialog簡介🍁el-dialog屬性🍁el-dialog示例🍁父子組件值傳遞示例 🍁前言 el-dialog是Element UI庫中的一個重要組件,用于在Vue應用程序中創建彈出框。它提供了一組實用的屬…

【Dubbo3云原生微服務開發實戰】「Dubbo前奏導學」 RPC服務的底層原理和實現

RPC服務 RPC服務介紹RPC通信模式RPC架構組成RPC技術要點RPC通信技術選項分析RPC實戰開發6大基礎組件基礎組件之Guava基礎組件之Hutools基礎組件之ReflectionASM基礎組件之FastJSON/FastJSON2基礎組件之FST相比FastJSON的優勢 基礎組件之Commons-Codec RPC框架層面選項分析RPC組…

持續集成交付CICD:Jenkins配置Nexus制品上傳流水線

目錄 一、實驗 1.Jenkins配置制品上傳流水線 二、問題 1.上傳制品顯示名稱有誤 一、實驗 1.Jenkins配置制品上傳流水線 (1) 新建流水線項目 (2)描述 (3)添加參數 (4)查看構建首頁 (5&…

實現簡易的一對一用戶聊天

服務端 package 一對一用戶;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector…

Vue.js - 界面設計工具和UI組件庫

ViewDesign ViewDesign是一款開源的在線設計工具,它主要提供了一種可視化的界面設計方法,可以幫助設計師和開發人員更高效地完成界面設計和開發工作。 ViewDesign的特點是支持在線協作,可以多人同時進行設計,提高了設計效率&…

Redis課程:黑馬點評

文章目錄 基于Redis實現短信登錄商戶查詢緩存優惠券秒殺一人一單 分布式鎖Redis分布式鎖誤刪情況說明解決Redis分布式鎖誤刪問題使用lua腳本解決分布式鎖的原子性問題 基于阻塞隊列實現秒殺優化Redis消息隊列優化秒殺業務達人探店參考 本文是根據黑馬程序員的視頻課程 黑馬程序…

vscode 開發c環境

前置條件: 1.vscode安裝C/C Extension Pack擴展 2.安裝gcc或者clang開發環境 在工程.vscode目錄下創建task任務文件 tasks.json {"tasks": [{"type": "cppbuild","label": "build","command": &q…

Kubernetes架構及核心部件

文章目錄 1、Kubernetes集群概述1.1、概述1.2、通過聲明式API即可 2、Kubernetes 集群架構2.1、Master 組件2.1.1、API Server2.1.2、集群狀態存儲2.1.3、控制器管理器2.1.4、調度器 2.2、Worker Node 組件2.2.1、kubelet2.2.2、容器運行時環境2.2.3、kube-proxy 2.3、圖解架構…

深入解析Node.js:V8引擎、事件驅動和非阻塞式I/O

文章目錄 1. 引言2. 什么是Node.js?3. V8引擎3.1 V8引擎簡介3.2 V8引擎的特點 4. 事件驅動4.1 事件循環4.2 事件觸發與監聽4.2.1 代碼示例 4.3 異步回調4.3.1 代碼示例 5. 非阻塞式I/O5.1 非阻塞式I/O的優勢5.2 異步與同步的對比5.2.1 同步I/O的代碼示例5.2.2 異步I…

前端知識筆記(三)———CSS核心功能手冊:從熟悉到精通

參考HTML代碼 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

指針 注意事項

指針變量的本質是用來放地址&#xff0c;而一般的變量是放數值的。 1、指針的定義&#xff08;兩種形式&#xff09; ①int x3; int *p&x ②int x; int *p&#xff1b; x3&#xff1b;p&x int*p中 *p和p的差別&#xff1a;簡單說*p是數值&#xff0c;p是地址&a…

Linux 系統上配置 SSH 密鑰

1. 生成 SSH 密鑰 打開終端&#xff0c;運行以下命令來生成 SSH 密鑰&#xff1a; ssh-keygen -t rsa -b 4096 -C "wqzbxhexample.com" 替換 "wqzbxhexample.com" 為你在 GitHub 注冊時使用的郵箱地址。 2. 添加 SSH 密鑰到 SSH 代理 運行以下命令來啟…

ROS gazebo 機器人仿真,環境與robot建模,添加相機 lidar,控制robot運動

b站上有一個非常好的ros教程234仿真之URDF_link標簽簡介-機器人系統仿真_嗶哩嗶哩_bilibili&#xff0c;推薦去看原視頻。 視頻教程的相關文檔見&#xff1a;6.7.1 機器人運動控制以及里程計信息顯示 Autolabor-ROS機器人入門課程《ROS理論與實踐》零基礎教程 本文對視頻教程…

java物聯網協議解析插件,java iot對接解析框架.java物聯網架構的設計思路

一般來說&#xff0c;物聯網開發則hi對硬件設備進行信息采集&#xff0c;所以建議技術棧如下&#xff1a; 物聯網開發技術棧一般如下&#xff1a; nettyspringbootrocketmqredismagic-byte 其中netty用于tcp和數據接入 rockemqt用于消息臨時儲存中轉&#xff0c; springboot就…

【論文精讀】REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS

REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS 前言ABSTRACT1 INTRODUCTION2 REACT: SYNERGIZING REASONING ACTING3 KNOWLEDGE-INTENSIVE REASONING TASKS3.1 SETUP3.2 METHODS3.3 RESULTS AND OBSERVATIONS 4 DECISION MAKING TASKS5 RELATED WORK6 CONCLUSI…