注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C#精髓摘要(7)  

2011-07-23 10:25:57|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

接前一部分,地址在这里

C#精髓》一书属于O'Reilly出版的动物系列技术书籍,这一系列的书算是赫赫有名了,趁现在有空,走马观花地读一下这本书。

C精髓摘要(2) - Castor - 趁年轻,多折腾~~
封面上的动物是星鼻鼹鼠(Condylura cristata)。与所有鼹鼠一样,星鼻鼹鼠主要居住在自己挖的地下隧道中,觅食时才出来。鼹鼠的身体上布满了防水的灰色短毛,大约6~8英寸长。它们的显著特征是长长的爪子,用于挖掘和觅食都非常理想。它们的眼睛、耳朵很小,牙齿非常锐利。视力和听觉很差。

星鼻鼹鼠的名字来源于它们鼻子上的25个触须,触须可以帮助鼹鼠找到食物,主要是昆虫、蠕虫、小鱼和其他小的池塘生物。星鼻鼹鼠是鼹鼠家族中的游泳健将,可以潜入水中捕鱼。它们喜欢住在沼泽中,分布于美国东北部和加拿大东南部。
星鼻鼹鼠是哺乳动物,雌鼹鼠每年可以生3~6只幼崽。
星鼻鼹鼠对人类的危害比其他鼹鼠要小,因为它偏爱水生食物,很少到人类的后院活动。
===================================================================================================

联网

使用到的类型一般都在System.Net.RegularExpressionsSystem.Net.Sockets命名空间中。

网络编程模型

使用请求\响应的类型实现高层访问,包括HTTP扩展。

底层访问有支持TCPUDP类型,在直接传输层访问还有原始套接字访问。

通用请求/响应结构

URI和流IO为基础,遵循Factory Design Pattern

厂类型WebRequestFactory用于解析URI并创建合适的协议处理器来完成请求。

HTTP支持

包括了访问和控制交互式Web会话的元素,如HTTP首部、用户代理字符串、代理支持、用户凭证、验证、Keep Alive、管道化及其他。

使用TCPUDPSocket

Socket类型本身可以完成传输层的访问。该类是本机Windows套接字上薄薄的包裹层,是受管制代码所能访问到的最底层联网资源。

TCP支持类:TCPListenerTCPClient,分别用于监听和与远程主机连接。

UDP支持类:UDPClient既是客户端,又是监听器,还支持组播。

使用DNS

Domain Name SystemBCL中的联网类型支持正常和反向的域名系统。

线程

多线程可以高效地并行执行程序。例子:

using System;

using System.Threading;

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            Thread t = new Thread(new ThreadStart(go));

            t.Start();

            go();

            Console.Read();

        }

        static void go()

        {

            for (char c = 'a'; c <= 'z'; c++)

                Console.Write(c);

        }

    }

}

输出结果不确定,一个可能的结果是:abcabc…xyzdef...xyz

因为使用了同一个资源:控制台。

线程同步

确保多个线程能够互相协调对共享资源的访问。

lock语句

该语句确保一次只有一个线程访问某段代码块。该语句能够获得使用类型实例的锁,该语句实际上是调用了BCL Moniter类中的EnterExit方法的语法缩写。

PulseWait操作

最常见的线程操作,用于在线程之间通过监视器通信。

Pulse告诉监视器一旦当前线程释放,锁就唤醒等待列表中的下一个线程。

线程有两种释放方式,一种是执行离开了阻塞lock语句,另一种是调用Wait方法暂时释放对象上的锁,让线程休眠,直到另一个线程通过Pulse唤醒。

死锁

使用锁的危险就是两个线程会同时结束阻塞,等待第二个线程占用的资源,大多数常见的死锁可以通过确保以相同顺序获取资源来避免。

常见线程类型

位于System.Thread命名空间下,最基础的类是Moniter类。

Moniter

实现了Hoare的监视器。可以将引用类型实例用作监视器。

Enter方法和Exit方法:用于获取或者释放对象上的锁。若已被占用,则Enter会一直等待。

TryEnter方法:不需要获取对象上的锁,锁在已获得时返回True,未获得时返回false

Wait方法:拥有锁的线程调用Wait方法来暂时释放锁并阻塞自己,同时等待另一个线程的Pulse方法通知自己。

PulsePulseAll方法:唤醒已阻塞的线程,一旦调用该方法,线程就会释放锁,并激活监视器中等待线程队列中的第一个(如果连读调用将会一次一个地唤醒),如果需要一次唤醒所有线程,使用PulseAll即可。

  评论这张
 
阅读(813)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016