逍遥一派 发表于 2015-1-18 11:28:39

ASP.NET网页编程之口语C#:多线程仓酷云

有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到net网页编程编译器那么简易。系列文章索引:《口语C#》
多线程是程序员口试经常常会晤对的成绩,对多线程观点的把握和了解程度,也会被一些老鸟用来权衡一团体的编程气力的主要参考目标。不管是实践事情必要仍是为了对付口试,把握多线程都是程序员职业生活中一个必需经由的环节。实在当你把“多线程”和你的“职业生活”接洽在一同思索的时分,就会以为“多线程”是何等的微小,对,没有超过不外的山。不外就算它很微小,但也有大概改动你的人生轨迹。不必忧虑,假如你对多线程还不太熟习,那末我们就一同来看看甚么是多线程吧。
跟前几篇的作风一样,我会在开篇的时分举一个实际生存中的例子,经由过程这个例子来映照一些流畅单调的盘算机编程专业常识,在让读者伴侣很好地舆解实际观点的同时,又制止了浏览教科书时的单调感到。此次我要举的例子是公司。纷歧定是IT公司,只管和编程范畴远一点儿吧,那就假定是一家搬场公司吧。
假设我们把公司看作是一个历程,那末人就是个中的线程。历程必需得有一个主线程,公司在创业早期常常大概呈现一人打世界的征象,可是,最少得有一团体,公司才干运作。公司创业早期,营业还不算太多,常常就是老板一团体身兼数职,一天假如只要1、2趟活儿,应当仍是忙得过去的。工夫长了,跟着营业的开展、口碑地创建,买卖愈来愈兴盛,一团体一定就忙不外来了。假定一天有5个活儿,老板一团体必需搬完A家才干搬B家,搬到傍晚估量也就搬到C家,D和E家都还在焦心地守候着呢。老板一团体要充任搬运工、司机、营业接洽人、法人代表、出纳等浩瀚脚色,累逝世累活公司的范围也上不往,人手不敷制约了公司的开展。那末怎样办,很复杂,增添人手,用编程的话来讲就是“复兴个线程”。

我们如今就用代码来形貌如许的场景吧,起首,我们筹办建立一家搬场公司,因而要筹办好未来和客户签的条约书:
1:publicclassContract2:{3:publicstringID{get;privateset;}4:publicstringFrom{get;set;}5:publicstringTo{get;set;}6:publicdecimalFee{get;set;}7:8:publicContract()9:{10:this.ID=DateTime.Now.ToBinary().ToString().Replace("-",String.Empty);2:{02:{1简是复杂了点儿,好歹也是份条约,如今我们就往请求注册一家公司,并组建好始创团队,哪怕今朝还只要老板一团体:
2:{22:{2:{42:{52:{62:{72:{82:{93:publicstringID{get;privateset;}03:publicstringID{get;privateset;}13:publicstringID{get;privateset;}23:publicstringID{get;privateset;}33:publicstringID{get;privateset;}43:publicstringID{get;privateset;}53:publicstringID{get;privateset;}63:publicstringID{get;privateset;}73:publicstringID{get;privateset;}83:publicstringID{get;privateset;}94:publicstringFrom{get;set;}04:publicstringFrom{get;set;}14:publicstringFrom{get;set;}24:publicstringFrom{get;set;}34:publicstringFrom{get;set;}44:publicstringFrom{get;set;}54:publicstringFrom{get;set;}64:publicstringFrom{get;set;}74:publicstringFrom{get;set;}84:publicstringFrom{get;set;}95:publicstringTo{get;set;}05:publicstringTo{get;set;}15:publicstringTo{get;set;}25:publicstringTo{get;set;}35:publicstringTo{get;set;}4好了,如今公司实体有了,老板就能够入手下手忙活了:
5:publicstringTo{get;set;}52:{5:publicstringTo{get;set;}75:publicstringTo{get;set;}85:publicstringTo{get;set;}96:publicdecimalFee{get;set;}06:publicdecimalFee{get;set;}16:publicdecimalFee{get;set;}26:publicdecimalFee{get;set;}3我们在后面设置了每次搬场耗时5秒钟,我们把它设想成5个小时。嗯,一天接一个票据,还能够承受,可是跟着老板买卖日渐兴盛,偶然候一天要接3个票据,这就起码要事情15个小时了,还要费心公司的运营等成绩,切实其实忙不外来了,并且照如许算,老板一天不成能完成5个或5个以上的票据,严峻制约了公司的开展:
5:publicstringTo{get;set;}52:{5:publicstringTo{get;set;}76:publicdecimalFee{get;set;}76:publicdecimalFee{get;set;}86:publicdecimalFee{get;set;}97:07:17:27:32:{0一天夜里,老板拖着倦怠的身子回抵家里,一进门就一头倒在床上,他尽力睁着快睁不开的眼睛,勉力地对本人说:“不可,我必定要想个举措,否则我会被累逝世的!”。
实在举措很复杂,谁都晓得,雇用几个员工,再买几辆车,人人分头举动,不但分管了事情包袱,并且在范围扩展的同时还能够完成更多更年夜的票据。好,我们如今就借助多线程机制来完成我们的设法:
5:publicstringTo{get;set;}52:{5:publicstringTo{get;set;}76:publicdecimalFee{get;set;}76:publicdecimalFee{get;set;}86:publicdecimalFee{get;set;}98:publicContract()12:{98:publicContract()38:publicContract()48:publicContract()58:publicContract()68:publicContract()73:publicstringID{get;privateset;}58:publicContract()9在这段程序中,我们分头举动,让每项搬场义务都由一个小团队往完成,了局我们发明,如今做三个票据的工夫跟做一个票据的工夫是一样的,进步了效力也扩展了公司范围。可是,既然引进了新的事情机制,我们在公司外部也不能不做一些小小的调剂:
9:{02:{9:{29:{39:{49:{57:9:{79:{89:{910:this.ID=DateTime.Now.ToBinary().ToString().Replace("-",String.Empty);010:this.ID=DateTime.Now.ToBinary().ToString().Replace("-",String.Empty);110:this.ID=DateTime.Now.ToBinary().ToString().Replace("-",String.Empty);23:publicstringID{get;privateset;}53:publicstringID{get;privateset;}610:this.ID=DateTime.Now.ToBinary().ToString().Replace("-",String.Empty);53:publicstringID{get;privateset;}810:this.ID=DateTime.Now.ToBinary().ToString().Replace("-",String.Empty);710:this.ID=DateTime.Now.ToBinary().ToString().Replace("-",String.Empty);810:this.ID=DateTime.Now.ToBinary().ToString().Replace("-",String.Empty);92:{002:{01调剂的只是MoveHouse这个办法外部的一些完成细节。公司接到的票据都保留在Contracts中,以是搬场的时分必要往拿一个票据然后依据票据上的信息来事情。本来我们只要一个线程在操纵Contracts,倒也不以为甚么,如今有多个线程都在对Contracts中的元素举行存取,我们不能不防备一些不测产生。这就是在利用多线程的时分经常必要思索的并提问题,以是我们用了lock关头字,当一个线程要操纵Contracts时,它先把Contracts锁起来,实在就是声明一下:“如今我在操纵它,你们谁都不要动,等我弄完了再说。”在lock块停止时被锁定的对象才会被解锁,别的的线程如今才能够往操纵它。
有了多线程机制,你会发明程序能够在更短的工夫内完成更多的事变。本文未将多线程机制中的一切观点八面玲珑地枚举出来,可是已向你展现了该怎样利用多线程和甚么时分能够思索利用多线程,别的的一些细节有待你往进一步探究,比方,你能够设置线程的优先级(假定逻辑上跟Fee挂钩,相似于‘加急’)等等。
把握多线程机制,并让它使你的使用程序变得加倍刁悍吧。

<br>
来自:多线程
在CSDN里搜索一下“初学”两字,竟有三百余篇帖子(也许更多)。有些帖子说,有了asp的基础,只要15天就能很熟悉了,我甚感自己的愚钝。更多帖子是向大家请教初学者适合看书。两个多月的时间(当然平常杂事比较多。

冷月葬花魂 发表于 2015-1-21 07:45:09

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

老尸 发表于 2015-1-30 11:38:40

可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。

小魔女 发表于 2015-2-6 10:58:31

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

变相怪杰 发表于 2015-2-16 00:31:41

由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。

小妖女 发表于 2015-3-2 06:43:10

业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

乐观 发表于 2015-3-4 20:50:14

目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.

小女巫 发表于 2015-3-11 21:00:34

通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。

再现理想 发表于 2015-3-27 22:33:02

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
页: [1]
查看完整版本: ASP.NET网页编程之口语C#:多线程仓酷云