本文主要参考自孙钟秀主编的<操作系统教程>一书中关于进程和线程的部分. 进程 为什么引入进程? 一,刻画系统动态性,发挥系统并发性,提高资源利用率. 以C#为例,在编辑器Visual Studio Code写了几行代码,保存为cs文件.在未运行状态的下的代码,称之为静态的程序.静态的程序是一个相对的概念.当程序运行起来,它的运行依赖于处理器(CPU)和主存储器资源,我可以称之为动态的程序.以该程序动态执行的过程为基本单位,抽象出一个概念,进程,即进行中的程序. 进程二字,主要是强调动态性.处理…
1.前言 2.开宗明义 3.开发原则和要点 (1)并发编程概述 (2)异步编程基础 (3)并行开发的基础 (4)测试技巧 (5)集合 (6)函数式OOP (7)同步 1.前言 最近趁着项目的一段平稳期研读了不少书籍,其中<C#并发编程经典实例>给我的印象还是比较深刻的.当然,这可能是由于近段日子看的书大多嘴炮大于实际,如<Head First设计模式><Cracking the coding interview>等,所以陡然见到一本打着"实例"旗号的…
1.对于操作系统来说,一个任务就是一个进程(Process).比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程. 2.在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread).比如Word,它可以同时进行打字.拼写检查.打印等事情. 3.线程是最小的执行单元,而进程由至少一个线程组成. 多进程 1.Unix/Linux:fork()调用实现多进程. 2.Windows没有fork(),multiprocess…
避免上下文延续 在默认情况下,一个 async 方法在被 await 调用后恢复运行时,会在原来的上下文中运行. 为了避免在上下文中恢复运行,可让 await 调用 ConfigureAwait 方法的返回值,参数 continueOnCapturedContext 设为 false : async Task ResumeOnContextAsync () { await Task.Delay (TimeSpan.FromSeconds (1)); // 这个方法在同一个上下文中恢复运行. }…
问题 有一批数据,需要对每个元素进行相同的操作.该操作是计算密集型的,需要耗费一定的时间. 解决方案 常见的操作可以粗略分为 计算密集型操作 和 IO密集型操作.计算密集型操作主要是依赖于CPU计算,所以可以最大限度利用多核CPU的并行操作非常适合计算密集型操作.图像操作是比较常见的计算密集型操作,图像操作一般是借助矩阵存储图像数据,该书作者就举了矩阵旋转为例. 思路是借助Parallel.ForEach实现并行操作. 伪代码如下 void RotateMatrices(IEnumerable<…
误解一:并发就是多线程 实际上多线程只是并发编程的一种形式,在C#中还有很多更实用.更方便的并发编程技术,包括异步编程.并行编程.TPL 数据流.响应式编程等. 误解二:只有大型服务器程序才需要考虑并发 服务器端的大型程序要响应大量客户端的数据请求,当然要充分考虑并发.但是桌面程序和手机.平板等移动端应用同样需要考虑并发编程,因为它们是直接面向最终用户的,而现在用户对使用体验的要求越来越高.程序必须能随时响应用户的操作,尤其是在后台处理时(读写数据.与服务器通信等),这正是并发编程的目的之一.…
问题 异步操作时,需要展示该操作的进度 解决方案 IProgress<T> Interface和Progress<T> Class 插一段话:读<C#并发编程经典实例>这本书偶有困惑,深感书中内容过于精炼,或许是作者故意为之,但显然对我这般知识浅薄的人来说,读起来这本书感到晦涩.偶然找到作者的个人博客,看到作者博客中对某一个知识点不同时间点上由浅至深的研究,十分欣喜.作者个人博客地址:https://blog.stephencleary.com/ 可查看此书作者博客中相…
前言 最近在看<C# 并发编程 · 经典实例>这本书,这不是一本理论书,反而这是一本主要讲述怎么样更好的使用好目前 C#.NET 为我们提供的这些 API 的一本书,书中绝大部分是一些实例,在日常开发中还是经常会使用到. 书中一些观点还是比较赞同,比如作者说目前绝大多数的图书对关于并发多线程等这些内容放到最后,而缺少一本介绍并发编程的入门指引和参考.另外一个观点是绝大多数国内的技术人员认为技术越底层就牛逼,而做上层应用的就是"码农",作者反对了这一观点,其实能利用好现有的库…
1. 简介 C#并发编程经典实例 是一本关于使用C#进行并发编程的入门参考书,使用"问题-解决方案-讨论"的模式讲解了以下这些概念: 面向异步编程的async和await 使用TPL(任务并行库) 创建数据流管道的TPL Dataflow库 基于LINQ的Reactive Extensions 为并发代码编写单元测试 并发方法之间的互操作 不可变.线程安全和生产者/消费者集合 并发代码中的取消功能支持 支持异步的面向对象编程 线程同步访问数据 我还挺喜欢这本书的,只有短短的170页却提…
进程process  与 线程thread 的区别 各个进程独立使用内存空间,(默认)不可互相访问,线程共享内存 进程的子进程是复制一份父进程,线程没有…