仓酷云

标题: ASP.NET网站制作之风趣的多线程编程(3)――线程外部是如... [打印本页]

作者: 小妖女    时间: 2015-1-16 22:34
标题: ASP.NET网站制作之风趣的多线程编程(3)――线程外部是如...
因为各系统的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
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
作者: 飘灵儿    时间: 2015-1-19 16:58
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
作者: 再现理想    时间: 2015-1-25 15:57
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
作者: 山那边是海    时间: 2015-2-3 06:04
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
作者: 谁可相欹    时间: 2015-2-8 19:55
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
作者: 兰色精灵    时间: 2015-2-26 00:46
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
作者: 透明    时间: 2015-3-8 10:59
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
作者: 再见西城    时间: 2015-3-15 22:23
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2