C# 线程手册 第五章 扩展多线程应用程序 系列

到目前为止我们使用多线程应用程序的目的是尽可能多地使用计算机处理器资源。所以,看起来我们仅需要为每个独立的任务分配一个不同的线程,并让处理器确定在任何时间它总会处理其中的某一个任务。额,对小系统来说这样做很好。但是当系统越来越复杂时,线程的数量也会越来越多,操作系统将会花费更多时间处理锁分配,理清线程之间的关系,处理程序指令的时间实际上是很少的。为了让我们的程序具备可扩展性,我们将不得不对线程进行一些控制。

设计CLR 的目的是创建一个提供多种服务(比如编译、垃圾回收、内存管理以及基于.NET 平台的线程池技术)的托管代码环境。

当然,Win32 平台和.NET Framework 平台在定义我们的应用程序使用的用来作为线程宿主的进程方面是不同的。在传统Win32 应用程序中,每个进程都由一个线程集合组成。如果一台机器仅有一个CPU,那么每个线程都要与其他线程交换线程本地存储和调用堆栈以实现时间轮转。单一处理器基于线程优先级来为每个线程分配时间片。当一个特定线程的时间片用完以后,它会被暂停执行同时其他线程被允许执行它的任务。在.NET Framework 中,每个Win32 进程都被逻辑上划分为同时寄宿线程、TLS以及调用堆栈的应用程序域。值得一提的是应用程序域间的通信由.NET Framework 中一个称为Remoting 的技术处理。

到目前为止,我们已经有了关于线程池和.NET 进程的基本概念,让我们进一步看看CLR 是如何为.NET 应用程序提供线程池功能的。

在这部分,我们将查看ThreadPool 类的多个方面并学习如何在我们的.NET 应用程序中使用ThreadPool 类的内容创建线程池。ThreadPool 类提供的线程可以用来做以下事情:

  1. 处理工作组件

  2. 处理异步I/O 调用

  3. 处理定时器

  4. 等待其他线程

本章的之前部分内容主要介绍如何在.NET Framework 中使用线程池的概念。现在我们要介绍如何使用C# 实现创建并使用线程池的.NET 应用程序。如之前描述的那样,System.Threading 命名空间中包含的ThreadPool 类可以被用于在.NET 应用程序中创建一个线程池。

在我们真正编码之前,我们必须对ThreadPool 类中的两个重要规则非常清楚。分别是:

  1. 每个应用程序域中只能有一个ThreadPool 对象

  2. 我们第一次调用ThreadPool.QueueUserWorkItem() 方法时会创建一个ThreadPool 对象,通过一个定时器或者注册的等待操作调用的回调方法(内部使用应用程序域的线程池)也可以创建一个ThreadPool 对象。

在这部分,我们将使用ThreadPool 和MSMQ 进行消息收发。MSMQ 是一个分布式队列,通过MSMQ 一个应用程序可以异步地与另外一个应用程序通信。

如果你有一个多处理器系统,那么你将有机会体验到线程真正的价值。Windows 操作系统负责向处理器分配线程,正如你在本书中看到的那样,启动一个进程会自动运行一个线程。.NET Framework 不提供细粒度的处理器分配控制,而是允许操作系统控制调度,这是由于操作系统比CLR 更加了解处理器的负载。CLR 负责提供一些诸如整个进程运行在哪个处理器上的控制。然而,一个进程中的所有线程都会运行在一个处理器上,控制进程中的线程运行在哪个处理器上的内容不会在本书中介绍。

Original: https://www.cnblogs.com/danielWise/archive/2013/01/14/2859124.html
Author: DanielWise
Title: C# 线程手册 第五章 扩展多线程应用程序 系列

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/539910/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux机器在命令行操作时开启/关闭代理

    命令行操作时,如果需要连接通过代理才能访问的地址,可以通过配置当前shell的配置文件来手动开启/关闭代理 注意:代理只对当前用户当前shell生效,切换用户或者重新连接需要重新开…

    Java 2023年6月14日
    052
  • 【Java面试】什么是令牌桶限流算法

    当面试官问你,”什么是令牌桶限流算法”!你知道要怎么回答,才能获得面试官的青睐吗?大家好,我是Mic,一个工作了14年的Java程序员。关于这个问题,面试官…

    Java 2023年6月16日
    067
  • Kubernetes-PV-PVC

    1. 简介 持久卷(PersistentVolume,PV&#…

    Java 2023年6月7日
    055
  • 解决SpringBoot jar包中的文件读取问题

    前言 SpringBoot微服务已成为业界主流,从开发到部署都非常省时省力,但是最近小明开发时遇到一个问题:在代码中读取资源文件(比如word文档、导出模版等),本地开发时可以正常…

    Java 2023年6月14日
    058
  • 前端——JS

    JS面试题 基本数据类型 Number、String、Boolean、Null、Undefined、Symbol、bigInt 引用数据类型 object、Array、Date、F…

    Java 2023年6月5日
    058
  • 【Unity Shader学习笔记】Unity光照-光照衰减

    Unity —共支持 4 种光源类型: 平行光 点光源(Point Light) 聚光灯(Spot Light) 面光源(area light) 面光源仅在烘焙时才可发挥作用, 因…

    Java 2023年6月9日
    064
  • NoteOfMySQL-11-权限管理

    一、权限系统 MySQL数据库中使用3种不同类型的安全检查:登录验证、授权、访问控制。 二、权限表 MySQL权限表存储在名为mysql的数据库中,常用的表有user、db、tab…

    Java 2023年6月5日
    071
  • Spring Boot 入门系列(二十五)读取配置文件的几种方式详解!

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Java 2022年9月22日
    0186
  • 对 wechat-dev 的吐槽

    我只能说这东西一套用下来体验非常不好 可是官方没有这种说明,多写几个字会死? 体验版不打开调试不允许发http请求,我服了。那你还提供调试面板,提供了个寂寞,也不说。 小程序 公众…

    Java 2023年6月7日
    036
  • JDK1.8 LongAdder 空间换时间: 比AtomicLong还高效的无锁实现

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Java 2022年9月23日
    0143
  • nginx 伪静态跳转

    301跳转要带着 permanent; 302 不带permanent rewrite ^.*$ https://www.hahaha.com/$1 permanent; Orig…

    Java 2023年5月30日
    055
  • SpringCloud–feign的配置加载

    spring cloud feign我们使用 @FeignClient注解,其中有几个核心属性: java;gutter:true; @AliasFor("name&qu…

    Java 2023年6月7日
    096
  • 再思考 SpringMVC,转….

    注入产生的原理: 数据库设置为GBK编码: 宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而…

    Java 2022年9月22日
    0515
  • spring boot拦截器WebMvcConfigurerAdapter,以及高版本的替换方案(转)

    文章转自 http://blog.51cto.com/12066352/2093750 最近项目采用spring icloud,用的spring boot版本是1.5.x的,spr…

    Java 2023年5月30日
    040
  • Vim编辑器以及linux常用命令

    Shift+G tar -xvf *.tar firewall-cmd –list-ports firewall-cmd –reload systemctl…

    Java 2023年6月8日
    050
  • fastposter发布1.4.5 跨语言的海报生成器

    fastposter发布1.4.5 跨语言的海报生成器 v1.4.5 增加了右键菜单,修复了跨域bug 一分钟完成海报开发任务 future: 增加了右键菜单 删除 图层上移 图层…

    Java 2023年6月5日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球