当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 并发和线程是相互纠缠的问题,选择先学哪个也许很难。
 

 

    摘要:四元数的运算: 基本的: p=[1 2 3 4] q=[5 6 7 8] p+q=[6 8 10 12] 2p=[2 4 6 8] 2个四元数的积: p=[m,u] q=[n,v] pq=[mn-vu,nu+mv+(v×u)] m,n是标量,u,v是向量 共轭四元数: p=[n,v] ~p=[n,-v] 旋转1个四元数( 或向量): p´=q(p)(~q) 旋转向量的话:用向量取代p的向量部分,p的标量部分取零。 四元数到旋转矩阵的变换: | ......
    摘要:我发现我的一个朋友对html脚本语言中得this代表设么含义不是很清楚。估计学过编程的人都是很清楚的,不过我今天还是想在这里38一下,: )。this.代表着当前所在类,比如下面代码:<table><tr onclick="javascript:alert(this.xamcsdn2);" xamcsdn2="xam"> <td>e</td> <td>r&l......


并发

翻译:taowen(taowen.bitapf.org)

原文:«indy in depth» concurrency 【相关文章:为什么C#没有提供“缺省参数”

【扩展阅读:C#对底层数据操作的通用类

【扩展信息:公共配置对话框

在多线程的环境,资源必须得到保护,使得它们不会因为一次允许多于一个线程访问而受损。

并发与线程是相互纠缠的问题,选择先学哪个也许很难。本文将先讲讲并发,它将为后面学习线程准备一些该先了解一下的知识。

术语

并发

并发是这样一个状态——许多task同时启动。当并发被实现得恰恰当当时,它可能被认为是“harmony”。而实现得糟糕时,就成了”chaos“。

在大部分情况中,所说的task指的都是线程。然而,task也可以是进程或者纤程。

两者之间的分界通常很清楚,而使用合适的技术才是关键

contention

确切的说何为contention?contention就是当多于一个task尝试着同时访问那独独一个资源时的情况。

如果你是在大家庭长大的孩子,可能这个比喻能很好的解释它意思。想想家里要是有六个小孩,妈妈把一块小匹萨放在桌上作为晚餐,会发生什么样的情况。那就是contention的含义。

无论何时,只要多个并发的task需要用读/写的方式访问数据,对数据的访问都必须得到控制从而保护它的完整性。如果访问没有得到控制,两个或者更多的task可能会“崩溃”。当其中的一个尝试着要读取变量时,另外一个可能要同时对它进行写入。如果一个task正在写,而另外一个正在读,那个读的task可能读取了部分写入的数据从而获得的是损坏了的数据。一般这样的操作是不会立即导致异常的,而只会在这之后给程序带来错误。

contention问题经常是在低流量的implementation中不会出现,因而在开发阶段经常是一点问题都没有。所以在开发的阶段应该采用合适的技术与压力测试。否则就有一些像玩russian roulette,问题在开发阶段仅仅是偶尔出现但是在部署阶段变成了频繁出现。

资源保护

资源保护是用来阻止由contention带来的问题的解决办法。资源保护的目的是一次仅让一个task访问指定的资源。

解决contention

无论何时,只要多个线程需要以读/写的方式访问数据,对数据的访问都必须得到控制从而保护它的完整性。这可能对于不熟悉线程操作的程序员来说intimidating。然而,大部分服务器不需要全局数据。这些程序一般在启动过程中初始化之后只需要读取数据。只要没有写操作,线程可以没有任何副作用的读

取全局数据。

下面讲的是解决contention最常用的办法。

只读

最简单的办法是只读。任何简单类型(整数,字符串,内存)以只读的方式访问不需要任何保护。这也可以扩展到诸如tlists等许多复杂类型。只要它们不以读/写方式访问任何全局或者成员变量,类型在只读方式时都是安全的。

此外,资源可以在任何可能的读操作之前被改写。这允许了在读取它的task启动之前,先初始化资源。

atomic操作

有一种方法是说如果操作是atomic,资源不要被保护。atomic操作是这样一种操作,它太小了以至于不能被计算机处理器分划开来。因为它尺寸小,从而它不会受到contentiion的影响因为它将由自身执行而且在执行过程中不会有task的切换。一般情况下,atomic操作是被编译为一条汇编指令的源代码。

典型的任务诸如读取或者写入一个整型或者布尔型变量被认为是atomic操作,因为它们被编译为一条move指令。
...   下一页

    摘要: --------------------------------------------------------------执行备份和清空当前使用的日志文件,clear_countlog.shzcatlinux, zcatlinux@yahoo.com.cn , 2004-06-28--------------------------------------------------------------- #!/bin/bashlogfile=/var......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE