并行思维(三)

线程是什么玩意

对于并行程序设计来说,线程的重要性不言而喻。

现代操作系统是典型的基于抢占式调度机制的多任务操作系统。

所谓多任务,指同一时刻,允许操作系统内有多个应用程序运行。比如,我们可以在同一时刻,一边收听音乐,一边浏览网页。当然,计算机能做到的远不止于此。

所谓抢占式调度机制,指在操作系统强制让另外的应用程序运行之前,正在运行的应用程序究竟可以占用 CPU 多少时间。这正是为什么我们感觉多个应用程序同时运行的真正原因,即使在单核处理器上。举例来说,Windows 操作系统任务调度的时间间隔大约在 20 毫秒左右(注:这个极短的时间,人眼无法感知,而人眼又欺骗了大脑,我们就感觉有多个程序在同时运行。实践所知,人眼能感知的最小时间大概是 100 毫秒。因此,Windows Client UI 开发人员应当注意,千万不要让你的程序界面响应大于 100 毫秒。假如大于此数,客户就会感到界面顿卡,带来槽糕的用户体验。Web UI 可以适当放宽界限。但无论怎样,快速的响应策略应当成为实现良好用户体验的首选)。

每个正在运行的应用程序实例都是一个进程。进程通常相对独立于其他进程运行。尤其是程序所使用的内存资源。举个例子,浏览器一般都不能直接访问音乐播放器的内存资源。如果有这个需求,则需要通过其他手段来达到该目的。比如文件映射,IPC,Socket 等机制。当然,这些机制通常比直接访问内存资源花费的时间要多。

拿最广泛应用的 Windows 操作系统而言,从软件开发人员的角度来看,进程其实就是个计算机资源集合。它是 Windows 操作系统分配和使用系统资源的基本单位。

Windows 进程均包含以下资源:

一个或多个线程。Linux 操作系统早期使用进程来模拟线程。

一个虚拟地址空间,该空间独立于其他进程地址空间。当然显式共享的内存除外。请注意文件映射共享物理内存,但共享进程使用不同的虚拟地址来访问这些映射文件。

一个或多个代码段,包括 DLL 中的代码。

一个或多个包含全局变量的数据段。

环境字符串,包含环境变量信息。

进程堆。

其他资源,比如打开的句柄和其他的堆。

而进程的每个线程则共享代码,全局变量,环境字符串等资源。每个线程都独立进行调度,是最基本的可执行单元,并包含以下资源:

为过程调用、中断、异常处理器和自动存储建立的堆栈。

线程本地存储(TLS),这是个指针数组,可以让线程分配存储以创建其特有的数据环境。

堆栈参数,在创建线程时生成,对每个线程来说通常唯一。

上下文结构,由系统内核通过机器注册表值来维护。

对于 .NET 开发人员来说,情况又有些不同。CLR 保留了与 Windows 线程分离的权利,而且在某些寄宿情形中,CLR 线程并没有与 Windows 线程准确匹配。比如,宿主可以告诉 CLR 将每个 CLR 线程表示为一个 Windows 纤程(Fiber)(注:纤程是轻量级的线程。Windows 对纤程一无所知)。

图 1 展示了一个拥有多线程的 Windows 进程。注意,该图只是示意图,没有展示实际内存地址,也没有按照比例绘制。

图 1 Windows 进程示意图

时间: 2024-08-03 05:14:10

并行思维(三)的相关文章

并行思维(二)

可伸缩性与加速比 可伸缩性是衡量应用程序加速比多少的尺度之一(注:加速比指应用程序串行化与并行化之间所花费时间之比,它表示并行化之后的效率提升结果).2 倍的加速比表明并行程序仅需要花费串行程序的一半时间.比如理想情况下,运行在单处理器上的程序花费 30 秒,而在双核机器上运行仅需花费 15 秒. 我们总是期望运行在双核机器上的应用程序要比在单核上快的多.同理,运行在四核机器上也要比在双核上快的多.这就好像以前当 CPU 换代升级时,随着主频提升,我们的程序总是可以运行的更快.很不幸,大多数应用

并行思维(一)

声明: 这篇文章主要想描述一下该怎样以一种安全和可伸缩性的方式使得程序并行化.在多核的今天,我们可能更加需要思考如何编写一个良好的并行程序.文中有相当的内容来自<Intel Threading Building Blocks>,虽说它针对 C++ 讲解,但原理通用,在跟语言,平台有关联的时候,楼主会使用 .NET 阐述. 每个软件开发人员都不得不面对并行编程.以前以及现在,我们在完成任务时,首先会考虑选择最佳算法,实现语言等.但现在我们必须首先考虑任务的内在并行性.而这反过来又会影响我们对算法

数据刷新中的并行改进(三)

在之前的两篇中分享了数据刷新的并行改进,其实在对很多的数据表做了切分之后,数据刷新的总体负载就基本是平均的了.如何使得刷新的过程更加平滑和完整,我们还是需要做一些工作的. 首先各个节点中都存在相同的表(其实是物化视图),所以在刷新的时候还是基本靠串行的思路来做并行的事情,怎么理解呢.可以参见下面的图片. 在有多个节点的情况下,数据从第1个节点到第3个节点刷新的时候,内部还是串行的,只是在第1个节点刷新的时候使用了并行,把700多个表分成了多个刷新的进程来并行处理.对于各个节点之间的刷新还是串行的

用搜索引擎的思维去思考如何打造优秀网站

也许有人会问:有没有搞错,搜索引擎也有思维?是的,所谓搜索引擎的思维,其实也就是搜索引擎在考查一个网站时所经常采用的各种指标和因素.作为想要让网站在搜索引擎那里更加得到信任和青睐的站长,我们只有按照搜索引擎所奉行的规则进行"出牌"以投其所好,这样才能使网站在搜索引擎的搜索结果中拥有更好的表现,从而借助搜索引擎为网站带来更多的流量,使网站的发展之路事半功倍,最终打造出一个优秀的站点. 如何利用搜索引擎的思维来建设网站,我们首先要搞清楚的便是搜索引擎所奉行的那套规则如何,其次便是按照其规则

并行查询让SQL Server加速运行

并行查询其优势就是可以通过多个线程来处理查询作业,从而提高查询的效率.SQL Server数据库为具有多个CPU的数据库服务器提供并行查询的功能,以优化查询作业的性能.也就是说,只要数据库服务器有多个CPU,则数据库系统就可以使用多个操作系统进程并行执行查询操作,来加速完成查询作业. 一.并行查询三步走. 并行查询作业在数据库中,主要经过三个步骤. 首先,数据库会判断是否需要进行并行查询.在数据库中有一个查询优化器,会对SQL语句进行优化,然后数据库才会去执行查询语句.而这个查询器在对SQL语句

马云三大思维携菜鸟完美领先

今年的双十一格外热闹,电商的战火已经烧到了物流平台,在这轮的物流之争中,马云三大思维完美领先. 思维一:基因影响企业运势 性格决定命运,基因影响性格,企业也是如此,其基因注定影响发展局势.仔细观察今年以来快递行业发生的变化,你会发现凡是带有大数据.智慧物流方面基因的企业都得到良好发展,而这一切竟然都有菜鸟网络的身影. 为何如此倚重菜鸟网络,这里通过菜鸟的实际情况可以窥其精奥.据说菜鸟目前员工只有1000人,但他们靠数据来协调每天将近200万人配送3500万个包裹这样一个大工程,这如果采用自建物流

李锦记家族传承的三个创新秘笈

很少有人真正了解这家传承四代的企业,在家族传承方面有何独到之处?又有怎样的具体操作"规章"? 随着中国民营企业进入大规模的一.二代传承交接之际,李锦记,这家拥有125年历史.四代传承的企业,显得格外有借鉴价值.但是很少有人真正了解这家传承四代的企业,在家族传承方面有何独到之处?又有怎样的具体操作"规章"?在香港中文大学郑宏泰编著的这本<家族企业治理:华人家族企业传承研究>里指出了李锦记集团在保持基业长青.家族企业有效传承方面具有三个独具匠心的创新秘笈:一

至尚国际专家:网络整合营销新思维倡领者

互联网时代日新月异,网络整合营销的理念已经 深入人心.企业如何融入互联网. 借力互联网实现升腾发展,在营销思维上需要自我革新.国内网络整合营销的领军公司至尚国际TOTHETOP(http://www.tothetop.ca)的整合营销专家rain接受了笔者的采访,并 提出了至尚国际TOTHETOP的营销新思维和新思想.   网络整合营销需要变革思维模式:   网络整合营销思维一:国际化 网络整合营销需要结合国际化视野,以全球化的眼光和角度分 析数字化营销的发展,掌握最 新的网络营销动态及资讯.

雕爷:辨析互联网思维,这不只是做营销

中介交易 SEO诊断 淘宝客 云主机 技术大厅 互联网思维是个伪命题吗?在互联网一词被热炒之后,往往会出现类似"理性"的思考.而近日,也有不少评论对互联网思维表示怀疑.而互联网思维典型--雕爷牛腩的老板雕爷撰文称,互联网思维不是伪命题,更多时候是我们没有理解和运用而已. 首先必须先弄清,什么"不是互联网思维".虽然"互联网思维"这件事,很像一个筐,啥都能往里装,但我们必须谨慎些,如果有些思维方式.操作手法.运营技巧,在互联网时代全面来临之前就有了