摘要: 企业代码需要我们用以下方式重新看待代码一、模块性 代码单元通常表现为类或类型。它们是基于特定目标而设计的。各个代码单元间的交互方式既要能达到较大的期望目标, 又不能违背对它们进行划分的准则。模块化不仅是针对可重用性的代码分离,同时也要求很强的松散耦合度。二、松散耦合的类 如果代码单元需要使用来自系统其他部分的服务,那么这些服务应该抽象地由传递到该单元中。创建所需的依懒不应该是该单元的职责。 如果针对代码单元编写单元测试很方便,就证明其松散耦合度很低。看下面的示例:using System;using System.Collections.Generic;using System.Data... 阅读全文
posted @ 2013-05-18 23:39 jingjunfeng 阅读(1143) 评论(0) 推荐(0) 编辑
摘要: 一、企业体系结构 从开发人员的观点来看,企业体系结构意味着定义一个过程、一个架构和一组模式,用于设计、开发、建立和维护机构或公司运行该软件所需要的关于该软件的一切内容。 企业体系结构是用于在各个设计层面上创建软件所有要素的一个统一的开发平台,它包括用于建立客户端应用程序、网站、数据库、办公应用软件、业务自动化工具、脚本,以及其他公司可能用于实现某些功能的任何工具。企业体系结构致力于将应用程序的每一层分解为模块化的片段以便重用。不同于典型的项目关注的仅是开发的最终目标,却边缘化或完全忽略了更大的企业目标。企业体系结构还包含了定义代码和实践方法的坚实基础,为异构软件环境下的互操作性带来方便。该基础 阅读全文
posted @ 2013-05-18 22:58 jingjunfeng 阅读(901) 评论(0) 推荐(0) 编辑
摘要: 一、非阻止同步.NET framework 非阻止同步结构完成一些简单操作而不 用阻止,暂停或等待。它涉及到如何使用 严格地原子操作,告诉编译器用 "volatile" 读和写的语法,有时候这种方式要比用锁还 要简单。原子和互锁如果一个语句执行一个单独不可分割的指令,那么它是原子的。 严格的原子操作排除了任何抢占的可能性。在C#中,一个简单 的读操作或给一个少于等与32位的字段赋值 是原子操作(假设为32位CPU)。更大的字段以及大于一个 的读/写操作的组合的操作都是非原子的: class Atomicity { static int x, y; static long z 阅读全文
posted @ 2013-05-18 18:25 jingjunfeng 阅读(6584) 评论(0) 推荐(0) 编辑
摘要: 单元模式和Windows Forms单元是多线程的逻辑上的“容器”,单元产生两种容量——“单的”和“多的”。单线 程单元只包含一个线程;多线程单元可以包含任 何数量的线程。单线程模式更普遍 并且能与两者有互操作性。 就像包含线程一样,单元也包含对象,当对象在一个单元内被创建后,在它的生 命周期中它将一直存在在那,永远也“居家不 出”地与那些驻留线程在一起。在排它锁的控制中,任何线程可以访问在任何同步环境中的对象。但是单元内的对象只有单元内的线程才可以访问。想象一个图书馆,每本书都象征着一个对象;借出书是不被允许的,书都在图书馆 创建并直到它寿终正寝。此外,我们用一个 人来象征一个线程。一个同步 阅读全文
posted @ 2013-05-18 17:04 jingjunfeng 阅读(6585) 评论(0) 推荐(0) 编辑
摘要: 一、同步要领1.阻止 (Blocking)当一个简易阻止方法、锁系统、信号系统等方式处于等待或暂停的状态,被称为被阻止。一旦被阻止,线程立刻放弃它被分配的CPU时间,将 它的ThreadState属性添加为WaitSleepJoin状态,不在安排时间直到停止阻止。停止阻止在任意四种情况下发生(关掉电 脑的电源可不算!): 阻止的条件已得到满足 操作超时(如果timeout被指定了) 通过Thread.Interrupt中断了 通过Thread.Abort放弃了当线程通过(不建议)Suspend 方法暂停,不认为是被阻止了。2.休眠 和 轮询调用Thread.Sleep阻止当前的线程指定的时间( 阅读全文
posted @ 2013-05-18 12:14 jingjunfeng 阅读(12039) 评论(0) 推荐(2) 编辑
摘要: 一、概述与概念 C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C#程序开始于一个单线程,这个单线程(也称为“主线程”)是被CLR和操作系统自动创建的,能够通过添加额外的线程创建多线程。 下面是个简单的例子:class Program01 { static void Main() { Thread t = new Thread(WriteY); t.Start(); while (true) Console.Write("x"); } ... 阅读全文
posted @ 2013-05-18 11:11 jingjunfeng 阅读(15349) 评论(0) 推荐(0) 编辑
摘要: 在.net平台下,应用程序和线程之间不是一一对应的。 在任何时间,一个应用程序域内都可能有多个线程。 而且,一个特定的线程在它的生命周期内并不一定被限定在一个应用程序域中。windows线程调度程序和CLR会根据需要让线程能够自由地跨越应用程序域的边界,但是在任何一个时间点上,一个线程只能运行在一个应用程序域中(也即是说,一个线程同时在多个应用程序域上执行任务是不可能的).net 4 TPL(Task Parllel Library 任务并行库),能用最小的代价比较省心地创建额外的线程。19.7 以编程方式创建次线程步骤 1.创建一个方法作为新线程的入口点 2.创建一个Parameterize 阅读全文
posted @ 2013-05-18 10:47 jingjunfeng 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 进程简单说就是一个运行的程序,是一个操作系统级别的概念,用来描述一组资源和程序运行所必需的内存分配。一个进程的失败不会影响到其他的进程。线程是进程中的基本执行单元。进程的入口点创建的第一个线程被称为主线程。 我们可以创建工作者线程来执行强度大的工作,主线程仍然对用户的输入保持响应。这使得整个进程具有更强的性能。但是,如果单个进程中的线程过多的话,性能反而会下降,因为CPU需要花费不少时间在这些活动的线程之间来回切换。单CPU的计算机并没有能力在同一时间运行多个线程。在一个单位时间(一个时间片)内,单CPU只能根据线程的优先级执行一个线程。当一个线程的时间片用完的时候,它会被挂起,以便执行其他线 阅读全文
posted @ 2013-05-18 10:35 jingjunfeng 阅读(573) 评论(0) 推荐(0) 编辑