艾伟_转载:话说并发

  对于很多人来说,并发是一个离不开的话题。那么我们平常对并发的理解可能局限于某个方面。去很好的理解并发,对于软件开发很有帮助。怎样去更好的理解并发?

  苹果下落,在我们认识牛顿定律之前。如果问苹果是下落的,我们都会说大家都知道,很清楚,很明白——了解但没引起关注。如果问为什么苹果下落。我们会举出很多相关的概念来说明苹果为什么下落——相似性,但却没有一个很清晰的概念。在万有引力之后,我们的认识已经有一定的高度,甚至对以后很多科技都很有帮助。

  所以怎样去理解并发,我们不缺乏经验。那么我们缺乏的就是那么一个高度,可以理解为深度的认识。

  可能有人会讲并发作为一种缺陷,一个问题。此时,我将他作为一种能力,称为并发能力。

  其实提升并发能力,最主要的就是减少无效线程,减少线程时间。

  抛出这样一句话,相信有很大一部分人很费解。并发跟线程有什么关系。并发,我们见得多的字眼可能是“同一时间访问量”。

  在分析以上主题也是重点之前,我们先来看看电脑的线程运行的情况。相信有操作系统相关知识的人都知道,确切的说CPU在某一时刻处理唯一线程,在这条线程的时间片段用完会切换到处理其他线程,从而产生了多线程。

  “同一时间访问量”是由多线程去引导处理才会有“同一时间访问量”这样一个概念。

  首先说的是减少无效线程,是提升并发能力的手段之一。过多的线程切换回产生性能消耗,而且类似于图片产生的线程对于网页来说,并不是最主要的,我们可以认为是无效线程。其他网站对于本网站来说,可以认为是无效线程。减少无效线程从某一个方面来说也是减少线程时间。

  如何减少线程时间。

  1. 运算能力强

  2. 粒度够小。避免死锁等情况。

  3. 传输够快。含网络传输,I/O吞吐量。

  现在已经清晰的认识到并发能力与线程有关。为什么减少线程时间,就是提升了并发能力。

  我们已经知道同一时间访问量,严格的说不可能是同一时间,因为有线程的调度。如果许多线程能够快结束,又有心的线程加入,并不会影响性能,因此,我所说的提升并发能力,就必须减少线程时间。

  下面从层次上来看减少线程时间。

  页面,比如说我们的后台数据处理都非常快。但是页面文件很大的话,或者并发的带宽不够宽,导致传输数据花很长的时间,那么页面的线程可能在传说数据上花费大量的时间。这样就导致了并发能力的降低。因为线程被延长了。线程的延长影响了电脑处理软件的能力,也就是并发能力的降低。

  解决方案:静态页面,分布式,页面优化,压缩,缓存,图片与页面服务器的分离等。

  后台,后台是影响并发的非常关键的因素。架构足够烂,代码足够乱等等都是影响性能,从而间接影响并发。

  架构决定着怎么去编码。这必然会影响运行时间。我跟几位朋友在争论时编译型快还是解释性快的时候,我的观点是解释性的,其实我并不支持我这一观点,但为什么这么说。因为编译型的要做更多的事情,也就是离核心越来越远。如果架构足够烂的网站还不如去用解释性去做网站。至少微软很多的东西就足够让性能降低非常明显。

  其次是代码细节,比如说有个Array的对象arrObj做下面运算:

  For(var i=0;i<arrObj.Count;i++){}

  其实这段代码,我们看起来没有什么问题,其实他的问题大着呢。For的运行时间复杂度为O(n),其实arrObj.Count在for中的时间复杂度也为O(n),这样将会达到2个O(n)的时间复杂度。其实我们可以这样写,for(var i= arrObj.Count-1;i>=0;i--){}这样只有一个O(n)的时间复杂度。

  所以,可能作为后台,大家谈得更多是性能,其实说性能还是在说并发能力。从架构和代码细节上入手将会有一个质量很高的,并发能力很强的软件。

  数据库的并发,主要影响有几个方面:一、数据库的架构,二、锁,三、SQL语句。可能我们对数据的优化可能侧重于sql语句,其实不然。数据库的架构同样非常的重要,也是影响数据库操作时间的因素,从而影响并发能力。关于数据库优化的细节可以参照相关资料。

 

时间: 2024-09-26 12:05:57

艾伟_转载:话说并发的相关文章

艾伟_转载:Web网站缓存文件并发问题解决方案

我所负责的XXX.CN平台前期由于网站整体运行效率低因此采用了文件缓存的方式(文件缓存就是当某个页面第一次接受用户访问时将数据库中获取到的内容转化成xml文件的形式,并且存储在服务器硬盘当中,当后面的人再来访问时就只需要直接读取xml缓存文件即可,减少了读取数据库的次数,从而达到提高网站运行效率的目的),但是使用了这种方式其中有一个更新数据的问题,在更新和读取是就产生了并发的问题,说白了就是读取和写入的矛盾,当你的网站的访问量达到一定程度后,产生这种矛盾的概率越来越大,已至于访问者无法访问网站,

艾伟_转载:老赵谈IL(3):IL可以看到的东西,其实大都也可以用C#来发现

在上一篇文章中,我们通过一些示例谈论了IL与CLR中的一些特性.IL与C#等高级语言的作用类似,主要用于表示程序的逻辑.由于它同样了解太多CLR中的高级特性,因此它在大部分情况下依旧无法展现出比那些高级语言更多的CLR细节.因此,如果您想要通过学习IL来了解CLR,那么这个过程很可能会"事倍功半".因此,从这个角度来说,老赵并不倾向于学习IL.不过严格说来,即使IL无法看出CLR的细节,也不足以说明"IL无用"--这里说"无用"自然有些夸张.但是

艾伟_转载:.NET Discovery 系列之七--深入理解.NET垃圾收集机制(拾贝篇)

本系列文章导航 .NET Discovery 系列之一--string从入门到精通(上) .NET Discovery 系列之二--string从入门到精通(勘误版下) .NET Discovery 系列之三--深入理解.NET垃圾收集机制(上) .NET Discovery 系列之四--深入理解.NET垃圾收集机制(下) .Net Discovery 系列之五--Me JIT(上) .NET Discovery 系列之六--Me JIT(下) .NET Discovery 系列之七--深入理解

艾伟_转载:数组排序方法的性能比较(上):注意事项及试验

昨天有朋友写了一篇文章,其中比较了List的Sort方法与LINQ中排序方法的性能,而最终得到的结果是"LINQ排序方法性能高于List.Sort方法".这个结果不禁让我很疑惑.因为List.Sort方法是改变容器内部元素的顺序,而LINQ排序后得到的是一个新的序列.假如两个排序方法的算法完全一致,LINQ排序也比对方多出元素复制的开销,为什么性能反而会高?如果LINQ排序的算法/实现更为优秀,那为什么.NET Fx不将List.Sort也一并优化一下呢?于是今天我也对这个问题进行了简

艾伟_转载:一个MVC分页Helper

本人写的一个分页Helper,支持普通分页(也就是,首页.上一页.下一页.末页等),综合分页(普通分页和数字分页的综合).下面是分页效果: 分页代码: PagerHelper.cs 代码   1 using System;  2  using System.Collections.Generic;  3 using System.Collections.Specialized;  4 using System.Linq;  5 using System.Web;  6 using System.

艾伟_转载:Lucene.Net学习心得

一.Lucene点滴 (发音为['lusen]),我经常就读鹿神,是头活蹦乱跳的好鹿,研究它吧,保证感觉它很神!Lucene是一个非常优秀的开源的全文搜索引擎,我们可以在它的上面开发出各种全文搜索的应用来.Lucene在国外有很高的知名度,现在已经是Apache的顶级项目. 二.倒排索引原理简述 Lucene是一个高性能的java全文检索工具包,它使用的是倒排文件索引结构.具体解释算法理论就不讲了,直接用例子来说明吧,如果你认真仔细的读懂例子,真正领会了其中的思想,你肯定就明白了Lucene索引

艾伟_转载:WCF版的PetShop之三:实现分布式的Membership和上下文传递

本系列文章导航 WCF版的PetShop之一:PetShop简介 WCF版的PetShop之二:模块中的层次划分 WCF版的PetShop之三:实现分布式的Membership和上下文传递 通过上一篇了解了模块内基本的层次划分之后,接下来我们来聊聊PetShop中一些基本基础功能的实现,以及一些设计.架构上的应用如何同WCF进行集成.本篇讨论两个问题:实现分布式的Membership和客户端到服务端上下文(Context)的传递. 一. 如何实现用户验证 对登录用户的验证是大部分应用所必需的,对

艾伟_转载:一次挂死(hang)的处理过程及经验

 前言:        CPU占用率低,内存还有许多空余,但网站无法响应,这就是网站挂死,通常也叫做hang.这种情况对于我这样既是CEO,又是CTO,还兼职扫地洗碗的个人站长来说根本就是家常便饭.以下是一次处理hang的经验及总结,前后用了一个月,不仅涉及程序排查,数据库优化,还有硬件升级的苦恼.其中辛酸苦辣只有经历过的站长才能体会,希望此文能对各位有所帮助!        首先介绍一下网站基本情况,是一个在线小说阅读网站,每天有一定页面访问量,在优化开始前由两台服务器运行,均为Dell Po

艾伟_转载:从ASP.NET的PHP执行速度比较谈起

上星期我在InfoQ发表了一篇新闻,对Joe Stagner在博客上发表的三篇关于ASP.NET与PHP性能对比的文章进行了总结.写新闻其实挺不爽的,因为不能夹杂个人的看法,只能平铺直叙陈述事实.当然,如果像某些新闻那样"换一种说法"是可以骗过一些"不明真相的群众",但是这就有违道德了.因此,在客观陈述完新闻内容之后,我只能选择把自己的感想.评论等内容放在自己的博客上. Joe Stagner的背景挺特殊,它是PHP的老用户,在ASP.NET出现之前就是PHP的重量