2015年7月17日星期五

[.net面向对象程序设计进阶](16)多线程(Multithreading)(一) 使用多线程提高程序性能 - yubinfeng

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
[.net面向对象程序设计进阶](16)多线程(Multithreading)(一) 使用多线程提高程序性能 - yubinfeng  阅读原文»

[.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 使用多线程提高程序性能

本节导读:

多线程(Multithreading)使我们程序可以同时进行多任务处理,直接提高了程序的执行效率,学习多线程对提高程序运行能力非常必要,本节主要介绍多线程原理及.NET中多线程的应用。

1. 关于多线程

在介绍多线程之前,先了解一下进程。

进程:独立运行的程序称为进程。(比如Windows系统后台程序,也可以称为后台进程)

线程:对于同一个程序分为多个执行流,称为线程。

多线程:使用多个线程进行多任务处理,称为多线程。

2. 如何合理使用多线程?

A.对于用户等待程序处理时,可以使用多线程处理耗时任务;

B.对于一些不需要即时完成的任务,可以使用后台任务线程处理;

C.对于多并发任务,可以使用多线程同时处理;

D.对于通讯类,比如对线程阻塞,可以使用多线程。

除过上面的几个常用的情况,还有很多情况下可以使用多线程。

3. 多线程的缺点
线程自然也有缺点,以下列出了一些:
A.如果有大量的线程,会影响性能,因为操作系统需要在他们之间切换;
B.更多的线程需要更多的内存空间;
C.线程会给程序带来更多的bug,因此要小心使用,比如:线程任务在执行完成后,要及时释放内存;
D.线程的中止需要考虑其对程序运行的影响。

4. .NET中的两种多线程

.NET本身就是一个多线程的的环境。

.NET中有两种多线程的:

一种是使用Thread 进行线程的创建、启动,终止等操作。

一种是使用ThreadPool 用于管理线程池.

5. .NET中使用Thread 进行多线程处理

.NET 基础类库的System.Threading命名空间提供了大量的类和接口支持多线程。System.Threading.Thread类是创建并控制线程,设置其优先级并获取其状态最为常用的类。

下面是该类几个至关重要的方法:
Thread.Start():启动线程的执行;
Thread.Suspend():挂起线程,或者如果线程已挂起,则不起作用;
Thread.Resume():继续已挂起的线程;
Thread.Interrupt():中止处于 Wait或者Sleep或者Join 线程状态的线程;
Thread.Join():阻塞调用线程,直到某个线程终止时为止
Thread.Sleep():将当前线程阻塞指定的毫秒数;
Thread.Abort():以开始终止此线程的过程。如果线程已经在终止,则不能通过Thread.Start()来启动线程。

6. 多线程示例

6.1 简单的线程

创建线程调用方法:

/// <summary>
/// 线程方法
/// </summary>
static void MyThread()
{
int i = 0;
while(true){
Console.WriteLine(
"我是一个线程方法"+ (++i));
};
}

创建并启用线程:

//创建线程
ThreadStart threadStart = new ThreadStart(MyThread);
Thread thread
= new Thread(threadStart);
thread.Start();
Thread.Sleep(
5000);
thread.Abort();

运行结果如下:

6.2 多线程示例

下面还是使用比较熟悉的“武林高手”的例子,来实现两个高手各自独立的线程下战斗。

(说明:此实例主要是说明多线程的独立运行,重点并不是战斗过程。对于战斗过程,我们可以根据杀伤力让两个高手分别出招,可以想一下实现方法)

先定义“武林”类来实现武功和武林高手及战斗的方法

/// <summary>
/// 武林
/// </summary>
public class MartialArts
{
/// <summary>
/// 大侠姓名
/// </summary>
private string name;


private List<MartialArtsMaster> masterList;
/// <summary>
/// 战斗
/// </summary>
/// <param name="name"></param>

public MartialArts(string _name,List<MartialArtsMaster> _list)
{
name
= _name;
masterList
= _list;
}拥抱AngularJS - 雪羽轻扬  阅读原文»

文中一些地方AngularJS简称ng

简介:

  ng诞生于2009年,由Misko Hevery等创建,后被Google收购,为克服HTML在构建应用上的不足而设计。

  是一款优秀的前端JS框架,核心特性:MVVM(Model-View-ViewModel)、模块化、双向数据绑定、依赖注入。

  官网:https://angularjs.org/

  中文网:http://www.apjs.net/

入门:

  图灵社区

书籍:

  用AngularJS开发下一代Web应用

   AngularJS权威教程

源码:

  GitHub

  https://code.angularjs.org/

API:

  AngularJS API

介绍:

  模块介绍:(v1.4.0)

  • angular.js ng 核心
  • angular-route.js     ng 路由(参考地址
  • angular-animate.js ng 动画(参考地址
  • angular-cookies.js ng Cookie(参考地址
  • angular-sanitize.js ng 安全模块(应对XSS)
  • angular-messages.js ng 表单验证(参考地址
  • angular-resource.js ng restful数据交互(然并卵,只是封装了一层$http,可以用来请求本地json文件)
  • angular-mocks.js ng 单元测试工具类(参考地址
  • angular-loader.js ng 单元测试用(异常捕获,参考地址
  • angular-scenario.js ng 单元测试用
  • angular-touch.js ng gestoures(针对移动端,基于jQuery Mobile的touch事件。不过貌似不太好用
  • angular-aria.js ng 富互联网应用(Accessible Rich Internet Applications,貌似没啥用)
  • angular-meesage-format.js ng 编译相关(谨慎使用,该文件只有当闭合编译器的高级选项标识时才会编译)

控制器(controller):

  简单理解为-通过依赖注入的方式,把service、依赖关系以及其他对象串联到一起,然后通过$scope把它们关联到view上。

var app = angular.module('app', []);
app.controller('indexCtrl', ['$scope', 'demoService', function($scope, demoService) {
  $scope.name = demoService.getName();
}])

  路由控制:

var app = angular.module('app', ['ngRoute']);
app.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/list', {
templateUrl: 'module/order/list.html',
controller: 'listCtrl'
})
.when('/detail/:orderid', {
templateUrl: 'module/order/detail.html',
controller: 'detailCtrl'
})
.otherwise({redirectTo: '/dashboard'});
}]);

指令(directive):

  简单理解为-在特定DOM上运行的函数,指令可以扩展这个DOM的功能。

  应用场景:封装通用插件

var app = angular.module('app', []);
app.directive('tree', function($location) {
return {
restrict: 'EA',
replace: true,
scope: {
treeNodes: '='
},
templateUrl: './script/directive/template/treeTmpl.html',
link: function($scope, $element, $attrs) {
  $scope.directTo = function(url) {
if(!!url) {
$location.path(url);
}
  }
}
}
})

  参考资料:

服务(service):

  简单理解-单例对象

  三种构建方式:

    factory、service、provider

  区分:

  factory需要创建一个对象,并return这个对象。比较常用且容易理解。 

var app = angular.

阅读更多内容

没有评论:

发表评论