代码改变世界

随笔档案-2014年03月

C#多线程(二)

2014-03-27 17:20 by OshynSong, 1011 阅读, 收藏,
摘要: 一、线程池每次创建一个线程,都会花费几百微秒级别的时间来创建一个私有的局部栈,每个线程默认使用1M的内存。这个可以在使用Thread类的构造函数时设置:[csharp]view plaincopyprint?newThread(newThreadStart(Go),2);newThread(newParameterizedThreadStart(Go("hello")),3);提供的两种构造函数方式都提供了对应的设置线程局部栈的大小。线程池通过共享和回收线程的方式来分配这些内存,这样可以使多线程运行在一个非常细粒度级别上而不影响性能。这对于充分利用多核处理器,使用分而治之的 阅读全文

C#多线程(一)

2014-03-27 16:49 by OshynSong, 3031 阅读, 收藏,
摘要: 一、定义与理解1、定义线程是操作系统分配CPU时间片的基本单位,每个运行的引用程序为一个进程,这个进程可以包含一个或多个线程。线程是进程中的执行流程,每个线程可以得到一小段程序的执行时间,在单核处理器中,由于切换线程速度很快因此感觉像是线程同时允许,其实任意时刻都只有一个线程运行,但是在多核处理器中,可以实现混合时间片和真实的并发执行。但是由于操作系统自己的服务或者其他应用程序执行,也不能保证一个进程中的多个线程同时运行。线程被一个CLR委托给操作系统的进程协调函数管理,确保所有线程都可以被分配适当的执行时间,同时保证在等待或阻止的线程不占用执行时间。2、理解线程与进程的关键区别是:进程是彼此 阅读全文

Websocket协议之php实现

2014-03-11 09:34 by OshynSong, 4095 阅读, 收藏,
摘要: 前面学习了HTML5中websocket的握手协议、打开和关闭连接等基础内容,最近用php实现了与浏览器websocket的双向通信。在学习概念的时候觉得看懂了的内容,真正在实践过程中还是会遇到各种问题,网上也有一些关于php的websocket的实现,但是只有自己亲手写过之后才知道其中的感受。其中,google有一个开源的phpwebsocket类(https://code.google.com/p/phpwebsocket/),但是从其握手过程中可以明显看出,这还是最初的websocket协议,请求头中使用了两个KEY,并非version 13(现行版本)。下面是本人实践过程,同时封装好了 阅读全文

Websocket协议数据帧传输和关闭连接

2014-03-07 00:52 by OshynSong, 3587 阅读, 收藏,
摘要: 之前总结了关于Websocket协议的握手连接方式等其他细节,现在对socket连接建立后的数据帧传输和关闭细节总结。一、数据帧格式数据传输使用的是一系列数据帧,出于安全考虑和避免网络截获,客户端发送的数据帧必须进行掩码处理后才能发送到服务器,不论是否是在TLS安全协议上都要进行掩码处理。服务器如果没有收到掩码处理的数据帧时应该关闭连接,发送一个1002的状态码。服务器不能将发送到客户端的数据进行掩码处理,如果客户端收到掩码处理的数据帧必须关闭连接。基本的数据帧为一个opcode、一个payload长度和发送的应用数据,根据ABNF的定义,详细信息如下图这里使用的是数据存储的位(bit),当进 阅读全文