仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 724|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之风趣的多线程编程(3)――线程外部是如...

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:34:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
因为各系统的API不同,代码调用API编写程序就会遇到很多不兼容的地方,比如Java改写后的Serv-U就不能在手机上执行,手机的游戏也不能直接在微机上执行。编程|多线程
  1. 看一下以下两个例子的运转了局:
  2. //TestThread.cs
  3. usingSystem;usingSystem.Threading;publicclassTest{staticintcount=0;staticvoidMain(){ThreadStartjob=newThreadStart(ThreadJob);Threadthread=newThread(job);thread.Start();for(inti=0;i<5;i++){count++;}thread.Join();Console.WriteLine("Finalcount:{0}",count);}staticvoidThreadJob(){for(inti=0;i<5;i++){count++;}}}
复制代码
  1. //InnerDataThread.cs
复制代码
  1. [code]usingSystem;usingSystem.Threading;publicclassTest{staticintcount=0;staticvoidMain(){ThreadStartjob=newThreadStart(ThreadJob);Threadthread=newThread(job);thread.Start();for(inti=0;i<5;i++){inttmp=count;Console.WriteLine("Readcount={0}",tmp);Thread.Sleep(50);tmp++;Console.WriteLine("Incrementedtmpto{0}",tmp);Thread.Sleep(20);count=tmp;Console.WriteLine("Writtencount={0}",tmp);Thread.Sleep(30);}thread.Join();Console.WriteLine("Finalcount:{0}",count);}staticvoidThreadJob(){for(inti=0;i<5;i++){inttmp=count;Console.WriteLine("                                Readcount={0}",tmp);Thread.Sleep(20);tmp++;Console.WriteLine("                                Incrementedtmpto{0}",tmp);Thread.Sleep(10);count=tmp;Console.WriteLine("                                Writtencount={0}",tmp);Thread.Sleep(40);}}}[code]Readcount=0Readcount=0Incrementedtmpto1Writtencount=1Incrementedtmpto1Writtencount=1Readcount=1Incrementedtmpto2Readcount=1Writtencount=2Readcount=2Incrementedtmpto2Incrementedtmpto3Writtencount=2Writtencount=3Readcount=3Readcount=3Incrementedtmpto4Incrementedtmpto4Writtencount=4Writtencount=4Readcount=4Readcount=4Incrementedtmpto5Writtencount=5Incrementedtmpto5Writtencount=5Readcount=5Incrementedtmpto6Writtencount=6Finalcount:6
复制代码
[/code][/code]再对照上面这个例子:
//利用Monitor.Enter/Exit
//MonitorThread.cs

usingSystem;
usingSystem.Threading;

publicclassTest
{
staticintcount=0;
staticreadonlyobjectcountLock=newobject();

staticvoidMain()
{
ThreadStartjob=newThreadStart(ThreadJob);
Threadthread=newThread(job);
thread.Start();

for(inti=0;i<5;i++)
{
Monitor.Enter(countLock);
inttmp=count;
Console.WriteLine("Readcount={0}",tmp);
Thread.Sleep(50);
tmp++;
Console.WriteLine("Incrementedtmpto{0}",tmp);
Thread.Sleep(20);
count=tmp;
Console.WriteLine("Writtencount={0}",tmp);
Monitor.Exit(countLock);
Thread.Sleep(30);
}

thread.Join();
Console.WriteLine("Finalcount:{0}",count);
}

staticvoidThreadJob()
{
for(inti=0;i<5;i++)
{
Monitor.Enter(countLock);
inttmp=count;
Console.WriteLine("                                Readcount={0}",tmp);
Thread.Sleep(20);
tmp++;
Console.WriteLine("                                Incrementedtmpto{0}",tmp);
Thread.Sleep(10);
count=tmp;
Console.WriteLine("                                Writtencount={0}",tmp);
Monitor.Exit(countLock);
Thread.Sleep(40);
}
}
}

了局与上例InnerDataThread.cs是纷歧样的,缘故原由就在于Monitor的利用了。
  1. Readcount=0Incrementedtmpto1Writtencount=1Readcount=1Incrementedtmpto2Writtencount=2Readcount=2Incrementedtmpto3Writtencount=3Readcount=3Incrementedtmpto4Writtencount=4Readcount=4Incrementedtmpto5Writtencount=5Readcount=5Incrementedtmpto6Writtencount=6Readcount=6Incrementedtmpto7Writtencount=7Readcount=7Incrementedtmpto8Writtencount=8Readcount=8Incrementedtmpto9Writtencount=9Readcount=9Incrementedtmpto10Writtencount=10Finalcount:10
复制代码
上面利用lock来锁定线程:
//LockThread.cs
usingSystem;
usingSystem.Threading;

publicclassTest
{
staticintcount=0;
staticreadonlyobjectcountLock=newobject();

staticvoidMain()
{
ThreadStartjob=newThreadStart(ThreadJob);
Threadthread=newThread(job);
thread.Start();

for(inti=0;i<5;i++)
{
lock(countLock)
{
inttmp=count;
Console.WriteLine("Readcount={0}",tmp);
Thread.Sleep(50);
tmp++;
Console.WriteLine("Incrementedtmpto{0}",tmp);
Thread.Sleep(20);
count=tmp;
Console.WriteLine("Writtencount={0}",tmp);
}
Thread.Sleep(30);
}

thread.Join();
Console.WriteLine("Finalcount:{0}",count);
}

staticvoidThreadJob()
{
for(inti=0;i<5;i++)
{
lock(countLock)
{
inttmp=count;
Console.WriteLine("                                Readcount={0}",tmp);
Thread.Sleep(20);
tmp++;
Console.WriteLine("                                Incrementedtmpto{0}",tmp);
if(count<100)
thrownewException();
Thread.Sleep(10);
count=tmp;
Console.WriteLine("                                Writtencount={0}",tmp);
}
Thread.Sleep(40);
}
}
}

了局怎样?与MonitorThread.cs对照一下,再想一想看。
因为各系统的API不同,代码调用API编写程序就会遇到很多不兼容的地方,比如Java改写后的Serv-U就不能在手机上执行,手机的游戏也不能直接在微机上执行。
金色的骷髅 该用户已被删除
沙发
发表于 2015-1-19 16:58:17 来自手机 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
飘灵儿 该用户已被删除
板凳
发表于 2015-1-19 16:58:17 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
再现理想 该用户已被删除
地板
发表于 2015-1-25 15:57:31 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
山那边是海 该用户已被删除
5#
发表于 2015-2-3 06:04:46 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
谁可相欹 该用户已被删除
6#
发表于 2015-2-8 19:55:48 | 只看该作者
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
兰色精灵 该用户已被删除
7#
发表于 2015-2-26 00:46:48 | 只看该作者
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
透明 该用户已被删除
8#
发表于 2015-3-8 10:59:22 | 只看该作者
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
再见西城 该用户已被删除
9#
发表于 2015-3-15 22:23:33 | 只看该作者
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 14:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表