摘要:
EventWaitHandle 继承:Object->WaitHandle-> EventWaitHandle派生:System.Threading.AutoResetEvent\System.Threading.ManualResetEvent AutoResetEvent、 ManualRese
阅读全文
posted @ 2022-01-18 00:10
小林野夫
阅读(552)
推荐(0)
摘要:
概念 Mutex出现的比monitor更早,而且传承自COM,当然,waitHandle也是它的父类,它继承了其父类的功能,有趣的是Mutex的脾气非常的古怪,它 允许同一个线程多次重复访问共享区,但是对于别的线程那就必须等待,同时,它甚至支持不同进程中的线程同步,这点更能体现他的优势,但是劣势也是
阅读全文
posted @ 2022-01-17 20:51
小林野夫
阅读(381)
推荐(0)
摘要:
信号量(Semaphore) Semaphore 一般译作 信号量,它也是一种线程同步工具,主要用于多个线程对共享资源进行并行操作的一种工具类。它代表了一种许可的概念,是否允许多线程对同一资源进行操作的许可,使用 Semaphore 可以控制并发访问资源的线程个数。 Semaphore 的使用场景
阅读全文
posted @ 2022-01-17 05:39
小林野夫
阅读(1940)
推荐(0)
摘要:
线程模式是微软的COM基础中的极其重要的概念.一定要吃透!初始一个STA套间实际上是相当于开了一个消息窗口,所有调用经此窗口过程调度到组件内. [STAThread] 可以理解成CoInitialize(NULL); 初始一个STA套间实际上是相当于开了一个消息窗口,所有调用经此窗口过程调度到组件内
阅读全文
posted @ 2022-01-16 03:50
小林野夫
阅读(656)
推荐(0)
摘要:
规则 com组件以接口的方式对外开放。 1:所要导出的类必须为公有; 2:所有属性、方法也必须为公有; 3:要导出的属性、方法必须用接口方式; interface IName { [DispId(1)]//为函数的标识:C#代码中必须定义了接口,才可以按照此方法实现调用。 void ShowAge(
阅读全文
posted @ 2022-01-15 20:33
小林野夫
阅读(7045)
推荐(2)
摘要:
转自:https://blog.csdn.net/black_bad1993/article/details/53906252 Com组件 1.线程模型是干嘛用的?解决”多个线程”“同时”调用你的COM组件的并发控制。客户没有你的COM的源代码,它不知道你的组件是怎么写的,是不是线程安全的(是否用C
阅读全文
posted @ 2022-01-15 17:32
小林野夫
阅读(576)
推荐(0)
摘要:
理论 Windows的线程同步方式可分为2种,用户模式构造和内核模式构造。内核模式构造:是由Windows系统本身使用,内核对象进行调度协助的。内核对象是系统地址空间中的一个内存块,由系统创建维护。 内核对象为内核所拥有,而不为进程所拥有,所以不同进程可以访问同一个内核对象, 如进程,线程,作业,事
阅读全文
posted @ 2022-01-14 09:00
小林野夫
阅读(2842)
推荐(2)
摘要:
NET上下文的概念 应用程序域是进程中承载程序集的逻辑分区,在应用程序域当中,存在更细粒度的用于承载.NET对象的实体,上下文是用来确定对象的逻辑归属,那就.NET上下文Context。所有的.NET对象都存在于上下文当中,每个AppDomain当中至少存在一个默认上下文(context 0)。 即
阅读全文
posted @ 2022-01-13 21:00
小林野夫
阅读(728)
推荐(0)
摘要:
转载自 Windows系统机制之对象管理器 设计的几个目的: 提供一种公共统一的机制来使用系统资源 将对象保护隔离到OS中的一个地方,从而确保统一的一致的对象访问策略 提供一种机制来管理进程对对象的使用 支持各种OS环境需求,比如一个进程能够从父进程继承资源 建立统一的规则来维护对象的保持力 提供为
阅读全文
posted @ 2022-01-12 06:10
小林野夫
阅读(768)
推荐(0)
摘要:
总结: 1、句柄就是进程句柄表中的索引。2、句柄是对进程范围内一个内核对象地址的引用,一个进程的句柄传给另一个进程是无效的。一个内核对象可用有多个句柄。Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。简而言之数据的地址需要变动,变动以后就需要有人来记录、管理变动,因此系统用
阅读全文
posted @ 2022-01-12 05:37
小林野夫
阅读(486)
推荐(0)
摘要:
详细:http://lzltool.com/doc/csharptocaddadd
阅读全文
posted @ 2022-01-12 05:22
小林野夫
阅读(123)
推荐(0)
摘要:
IntPtr类由来 .NET提供了一个结构体System.IntPtr专门用来代表句柄或指针。句柄是对象的标识符,当调用这些API创建对象时,它们并不直接返回指向对象的指针,而是会返回一个32位或64位的整数值,这个在进程或系统范围内唯一的整数值就是句柄(Handle),随后程序再次访问对象,或者删
阅读全文
posted @ 2022-01-11 21:12
小林野夫
阅读(1895)
推荐(1)
摘要:
marshal:直译为“编排”, 在计算机中特 指将数据按某种描述格式编排出来,通常来说一般是从非文本格式到文本格式的数据转化。unmarshal是指marshal的逆过程。比如在WebService中,我们需要把java对象以xml方式表示并在网络间传输,把java对象转化成xml片段的过程就是m
阅读全文
posted @ 2022-01-11 21:12
小林野夫
阅读(968)
推荐(0)
摘要:
转载自:https://www.cnblogs.com/silverb/p/5300255.html 句柄的基本概念 1、句柄就是进程句柄表中的索引。2、句柄是对进程范围内一个内核对象地址的引用,一个进程的句柄传给另一个进程是无效的。一个内核对象可用有多个句柄。Windows之所以要设立句柄,根本上
阅读全文
posted @ 2022-01-11 20:25
小林野夫
阅读(1611)
推荐(0)
摘要:
RPC服务的基本架构图如上,可以很清楚地看到,一个完整的RPC架构里面包含了四个核心的组件,分别是Client ,Server,Client Stub以及Server Stub,这个Stub大家可以理解为存根。分别说说这几个组件: 客户端(Client): 服务的调用方。 服务端(Server):真
阅读全文
posted @ 2022-01-11 03:22
小林野夫
阅读(607)
推荐(0)
摘要:
一、IOCP(I/O Completion Ports)简介 要实现异步通信,必须要用到一个很风骚的I/O数据结构 ,叫重叠结构“Overlapped”,Windows里所有的异步通信都是基于它的,完成端口也不例外。 Overlapped重叠结构 这里可以简单的将其理解为一个操作系统和用户之间的参数
阅读全文
posted @ 2022-01-10 05:09
小林野夫
阅读(1711)
推荐(2)
摘要:
overview 这个字符到底是什么含义呢?其实它的意思就是当程序在等待设备操作的时候,可以继续往下做而不必阻塞到那个地方等待设备操作的返回,这就造成了程序运行和设备操作时间上的重叠。 Overlapped I/O也称Asynchronous I/O,异步I/O模型。异步I/O和同步I/O不同,同步
阅读全文
posted @ 2022-01-10 04:46
小林野夫
阅读(899)
推荐(0)
摘要:
总结:IOCP :我的打印文件放在店里面排队,轮到我打印了,店长帮我打印一下,打印好了通知我来拿 Epoll :我的打印文件放在店里面排队,轮到我叫我一下,我自己来打印。 直入正题:Epoll 是Linux系统下的模型;IOCP 是Windows下模型;Epoll 是当事件资源满足时发出可处理通知消
阅读全文
posted @ 2022-01-10 02:17
小林野夫
阅读(912)
推荐(1)
摘要:
Overview 如今的应用程序越来越复杂,我们常常需要使用《异步编程:线程概述及使用》中提到的多线程技术来提高应用程序的响应速度。这时我们频繁的创建和销毁线程来让应用程序快速响应操作,这频繁的创建和销毁无疑会降低应用程序性能,我们可以引入缓存机制解决这个问题,此缓存机制需要解决如:缓存的大小问题、
阅读全文
posted @ 2022-01-09 22:50
小林野夫
阅读(6708)
推荐(0)
摘要:
案例如下的。我个人理解是不会出现出现0,0的结果,但是很明显出现了。 说明对我对 Volatile\内存屏障\乱序排序的理解是不对。 今天就通过这个案例,理清这些概念。 using System; using System.Threading; using System.Threading.Task
阅读全文
posted @ 2022-01-08 18:19
小林野夫
阅读(1386)
推荐(2)
摘要:
正如在第一篇文章中提到的,编译器可能通过对内存操作进行重新排序来优化代码。 在 .NET Framework 4.5 中,将 C# 编译为 IL 的 csc.exe 编译器并不执行大量的优化操作,因此该编译器不会对内存操作进行重新排序。 但将 IL 编译为机器码的实时 (JIT) 编译器实际上将执行
阅读全文
posted @ 2022-01-08 17:16
小林野夫
阅读(341)
推荐(0)
摘要:
无序执行指令(Out-of-Order,简称OoO)模式允许CPU充分利用指令周期,避免由于某个指令延迟导致指令周期被浪费。在这种模式下,处理器根据输入数据的可用性来安排指令的执行顺序,而不是程序原先输入数据的顺序。通过这种执行顺序上的调整,处理器可以避免由于指令等待数据可用带来的空闲,转而执行数据
阅读全文
posted @ 2022-01-07 06:10
小林野夫
阅读(150)
推荐(0)
摘要:
overview 同步基元分为用户模式和内核模式 用户模式:Iterlocked.Exchange(互锁)、SpinLocked(自旋锁)、易变构造(volatile关键字、volatile类、Thread.VolatitleRead|Thread.VolatitleWrite)、MemoryBar
阅读全文
posted @ 2022-01-07 01:26
小林野夫
阅读(3422)
推荐(1)
摘要:
在.NET Framework中,System.Convert类中提供了较为全面的各种类型、数值之间的转换功能。 其中的两个方法可以轻松的实现各种进制的数值间的转换: Convert.ToInt32(string value, int fromBase): 可以把不同进制数值的字符串转换为数字,其中
阅读全文
posted @ 2022-01-05 05:13
小林野夫
阅读(334)
推荐(0)
摘要:
什么是优先级反转(翻转)优先级反转,是指在使用信号量时,可能会出现的这样一种不合理的现象,即: 高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。-- 从现象上来看,好像是中优先级的任务比高优先级任务具有更高的优先权。具体来说:当高优先级任务正
阅读全文
posted @ 2022-01-05 04:03
小林野夫
阅读(318)
推荐(0)
摘要:
由于.net core 是开源的。所以可以让.net库文件参与程序调试。具体vs2022配置如下 1、设置VS2022 加载程序数据文件(.pdb俗称符号文件) 1)选择工具>选项>调试>符号,并确保已选中“ Microsoft符号服务器(.NET框架相关的库)和NuGet.org符号服务器”选项。
阅读全文
posted @ 2022-01-04 05:30
小林野夫
阅读(1977)
推荐(0)
摘要:
CPU缓存架构 不同的CPU厂商的架构也有些不同,在这里只介绍流行的缓存架构 缓存一致性可以分为三个点: 在进程每个写入运算时都立刻采取措施保证资料一致性 每个独立的运算,假如它造成资料值的改变,所有进程都可以看到一致的改变结果 在每次运算之后,不同的进程可能会看到不同的值(这也就是没有一致性的行为
阅读全文
posted @ 2022-01-03 20:22
小林野夫
阅读(948)
推荐(0)
摘要:
重要 (1) windbg命令分为标准命令(40个左右),元命令(一百多个)和扩展命令。 标准命令提供最基本的调试功能,不区分大小写。如:bp g dt dv k等 元命令提供标准命令没有提供的功能,也内建在调试引擎中,以.开头。如.sympath .reload等 扩展命令用于扩展某一方面的调试功
阅读全文
posted @ 2022-01-03 01:54
小林野夫
阅读(570)
推荐(0)
摘要:
进程切换(上下文切换)1、暂停当前运行进程,从运行状态变成其他状态。 2、调度另一个进程从就绪状态变成运行状态。 进程切换的要求切换前,保存进程上下文 切换后,恢复进程上下文快速切换快速切换 进程生命周期的信息 寄存器(PC,SP,.….)CPU状态内存地址空间 上下文切换的图示 进程控制块PCB:
阅读全文
posted @ 2022-01-03 01:00
小林野夫
阅读(984)
推荐(0)
摘要:
转载自:https://www.cnblogs.com/xuanyuan/p/14679727.html 计算机领域有一个经典的问题:从你在浏览器中输入URL并按下回车,到网页渲染出来,这中间发生了什么? 通过这个问题,可以考察候选人对计算机网络的理解程度,因此出现在数不清的面试场合。 毋庸置疑,这
阅读全文
posted @ 2022-01-02 18:46
小林野夫
阅读(420)
推荐(0)
摘要:
四核八线程是指使用了超线程技术 , 把一个物理核心,模拟成 两个逻辑核心, 理论上要像八颗物理核心一样在同一时间执行八个线程,所以设备管理器和任务管理器中会显示出八个核心,但事实上并不是真正的八个核心,四核八线程就是真四核,虚拟八核;四核八线程在有些情况下比如任务量不大能让CPU利用率提高很多从而使
阅读全文
posted @ 2022-01-02 14:06
小林野夫
阅读(1479)
推荐(0)
摘要:
OverView 同步基元分为用户模式和内核模式 用户模式:Iterlocked.Exchange(互锁)、SpinLocked(自旋锁)、易变构造(volatile关键字、volatile类、Thread.VolatitleRead|Thread.VolatitleWrite)、MemoryBar
阅读全文
posted @ 2022-01-01 23:43
小林野夫
阅读(2642)
推荐(0)
摘要:
概述: Incremental Linking翻译成中文就是“增量链接”,是一个链接的参数选项,作用就是为了提高链接速度的。什么意思呢?不选用增量链接时,每次修改或新增代码后进行链接时会重新洗牌,把原来的.exe删了,重新链接成一个新的.exe,这样对于大型项目来说链接会比较慢。而选用增量链接时,在
阅读全文
posted @ 2022-01-01 17:44
小林野夫
阅读(999)
推荐(0)
摘要:
mscn:在 Visual Studio 调试器(C#)中指定符号 (.pdb) 和源文件 PDB全称Program Database,程序数据库 ( .pdb) 文件(也称为符号文件)将项目源代码中的标识符和语句映射到已编译应用中的相应标识符和说明。 这些映射文件将调试器链接到源代码,以进行调试。
阅读全文
posted @ 2022-01-01 14:56
小林野夫
阅读(8069)
推荐(4)
摘要:
锁提供了线程安全三要素中的 有序性。二、SpinWait是同步锁的核心,而Thread是SpinWait的核心。 Spinwait结构 完成代码:SpinWait.cs (dot.net) SpinWait结构的核心代码 internal const int YieldThreshold = 10;
阅读全文
posted @ 2022-01-01 04:28
小林野夫
阅读(895)
推荐(0)
摘要:
概念 原子操作(atomic action):也叫primitive(原语、基元),它是操作系统用语范畴。指由若干条指令组成的,用于完成一定功能的一个过程。 原语是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性·即原语的执行必须是连续的,在执行过程中不允许被中断。 操作系统只需在执
阅读全文
posted @ 2021-12-31 02:55
小林野夫
阅读(2574)
推荐(0)
摘要:
其实Java并发框架的基石一共有两块,一块是本文介绍的CAS,另一块就是AQS,后续也会写博客介绍。 什么是CAS机制 CAS机制是一种数据更新的方式。在具体讲什么是CAS机制之前,我们先来聊下在多线程环境下,对共享变量进行数据更新的两种模式:悲观锁模式和乐观锁模式。 悲观锁更新的方式认为:在更新数
阅读全文
posted @ 2021-12-31 01:44
小林野夫
阅读(1303)
推荐(0)
摘要:
System.Threading.Thread类 涉及到的类和枚举 Volatile 类Interlocked 类SpinLock 类SpinWait类Barrier 类ThreadLocal<T> 类ApartmentState 枚举ThreadPriority 枚举ThreadStart 类Th
阅读全文
posted @ 2021-12-29 20:14
小林野夫
阅读(1254)
推荐(0)
摘要:
调度的概念 1. 调度的基本概念 在多道程序系统中,进程的数量往往多于处理机的个数,进程争用处理机的情况就在所难免。 处理机调度是对处理机进行分配,就是从就绪队列中,按照一定的算法(公平、髙效)选择一个进程并将处理机分配给它运行,以实现进程并发地执行。 处理机调度是多道程序操作系统的基础,它是操作系
阅读全文
posted @ 2021-12-29 16:21
小林野夫
阅读(843)
推荐(0)
摘要:
本文为第三篇,进程管理之五状态模型,进程在操作系统里边是有多个状态的,本文就是了解进程在操作系统中的多个状态 1、进程的五个状态 创建状态 就绪状态 阻塞状态 执行状态 终止状态 2、进程处于这五种状态时在做什么 (1)就绪状态 当进程被分配到除CPU以外的所有必要资源后,就处于就绪状态 只要再获得
阅读全文
posted @ 2021-12-29 01:55
小林野夫
阅读(778)
推荐(0)