Windows程序效率 (转)[@more@]  是一个庞大的功能丰富的,并且为我们提供了强大的应用接口,使我们可以编写功能丰富的应用程序,但正因为Windows的复杂性和应用程序接口的强大,我们往往忽视了很多技术细节,使得写出来的程序较低,缺乏竞争力。以下是我总结的一些提高程序效率的规则,希望对提高程序质量有帮助。

减少程序在核心态和态之间的切换:namespace prefix = o ns = "urn:schemas--com::office" />

我们知道Windows系统中的应用程序可以在两种状态下运行-用户态和核心态,但是如果进程在两种状态之间切换,则需要耗费上千个周期,这对于高质量的程序来说是绝对不能容忍的。典型的例子是用户线程互斥的临界区和互斥体(Mutex),互斥体是核心态,应用程序使用它时会切换到核心态,而临界区则直接在用户态下工作,所以如果可能,应该用临界区取代互斥体。

使用线程代替进程以减少系统资源的开销

在Windows系统中,进程是资源非配的单位,线程是调度的单位,因为线程共享进程的地址,所以与创建进程相比,创建线程可以节省大量的系统资源开销。所以对于并发计算的问题,可以尽量使用线程机制来实现。

减少线程场景切换的开销

线程为应用程序提供了并发机制,使程序的多个代码段可以“同时”运行,比如使用多个线程提高费时的IO操作,但是不是线程愈多越好呢?当然不是,线程虽然使用进程地址空间,但仍有自己的运行环境(堆栈、临时令牌等),线程场景的切换是要耗费CPU资源的,同一个计算过程(不涉及IO操作),使用两个线程来完成比使用一个线程来完成所需要的时间实际是更多。

减少的跨边界(页)访问

在Windows系统中,内存是以页(4KB)为单位组织的,由于Windows是虚拟系统,内存中的页在不用时常换出到外存中,需要用到的时候再装入内存,这样可以使一个应用程序使用比实际内存大得多得地址范围。但是内存得换入换出与CPU得速度相比是很费时的IO操作。下面有两段几乎完全一样的程序,在VC下编译为release版本后,前一段的执行时间是后一段的200多倍

程序1:

char buf[8][4000];

char ch;

int i, j;

for(j=0; j<4000; j++)

{

for(i=0; i<8; j++)

{

ch = buf[i][j];

}

}

程序2:

char buf[8][4000];

char ch;

int i, j;

for(i=0; i<8; j++)

{

for(j=0; j<4000; j++)

{

ch = buf[i][j];

}

}

windows和linux多进程效率,Windows程序效率 (转)相关推荐

  1. Linux != Windows( Linux 不是 Windows)

    Linux != Windows ( Linux 不是 Windows) Derived works 如果你访问了这个页面,那么十有八九你是一个 Linux 的新用户,你正遇到许多关于如何由 Wind ...

  2. gui与windows和linux但关系,从程序员的角度看Linux和windows的对比

    ,~/vsZ.{ `5J0S LUPA开源社区#fjY*Lj$U5GYRBcc 本人在Unix SYS5,DOS,Windows3.x,windows9.x/NT 和Linux几个不同时期流行的OS上 ...

  3. linux里运行windows,在Linux上运行Windows应用程序

    当前位置:我的异常网» Linux/Unix » 在Linux上运行Windows应用程序 在Linux上运行Windows应用程序 www.myexceptions.net  网友分享于:2015- ...

  4. windows模拟linux系统下载,Windows模拟器|Wine(Linux下运行Windows程序)v1.9 官方最新版_软件侠下载站...

    Wine最新版是一款功能强大的虚拟机软件,Wine ("Wine Is Not an Emulator" 的首字母缩写)是一个能够在多种 POSIX-compliant 操作系统( ...

  5. windows兼容Linux php,支持windows与linux的php计划任务的实现方法

    本文实例讲述了支持windows与linux的php计划任务的实现方法.包括了在winows下利用winodows计划任务来操作,还有在linux中利用linux的方法来实现.分享给大家供大家参考.具 ...

  6. windows文件 linux cr,DOS/Windows和Linux/Unix间的文件格式转换

    做无线传感器网络自己生产拓扑的时候一直碰到看起来相同的文件被解析成拓扑的时候却不同,一直摸不清原因,居然是这个问题,还好看见了这篇文章. DOS/Windows和Linux/Unix的文件换行回车格式 ...

  7. 如何通过windows控制linux,如何从Windows远程控制Linux | MOS86

    ifconfig将显示您需要连接的IP地址. 如果Linux盒具有以太网连接,则该地址将在eth0旁边列出. 如果以无线方式连接,请查找针对wlan0列出的IP地址. 如果这不容易或不方便,则有另一种 ...

  8. windows借鉴linux了吗,Windows应该借鉴Linux的10大功能特征

    Windows应该借鉴Linux的10大功能特征 2009年12月07日 11:11作者:cnbeta编辑:陈涛文章出处:泡泡网原创 分享 泡泡网软件频道12月7日 在可预见的未来,Windows和L ...

  9. windows和linux主机名,windows和linux下如何远程获取操作系统版本和主机名

    远程获取windows和linux操作系统版本和主机名需要具备以下条件: 假设 主机A(windows 7),ip:192.168.12.2 主机B(centos 6.3),ip:192.168.12 ...

最新文章

  1. centos mysql权限不够_centos执行文件时权限不够怎么解决_网站服务器运行维护,centos...
  2. autopep8_Autopep8的使用
  3. 重新上手c语言的一些坑
  4. 应用联合服务 云计算拉近应用和操作距离
  5. Kafka应用实践与生态集成
  6. 如何在Spring框架中使用RMI技术
  7. 南阳理工acm24素数距离问题
  8. 高校学生竞赛信息管理系统介绍
  9. 杭电OJ系列 刷题顺序
  10. iis 值不在预期的范围错误解决办法
  11. 计算机图形学第四次上机——鼠标回调图形界面交互实现
  12. Kamiya艾美捷抗胸腺嘧啶二聚体单抗(环丁烷嘧啶二聚体CPD)说明书
  13. 使用cookie防止恶意点击
  14. Out of range value for column
  15. 转:【PAMI2018】ASTER_An Attentional Scene Text Recognizer with Flexible Rectification
  16. 贝叶斯视角下的机器学习
  17. QtCreator:missing separator. Stop.
  18. Android jni curl返回CURLE_COULDNT_RESOLVE_HOST问题
  19. 质量流量计在油品计量中的应用
  20. 微软必应借PK谷歌突围中国搜索市场

热门文章

  1. Java Stack栈类详解
  2. Hadoop大数据——mapreduce的secondary排序机制
  3. 虚拟内存越大越好吗_滤波电容越大越好吗?
  4. 天翼云centos7.5系统挂载磁盘
  5. Qt Creator常用快捷键及技巧提升编码效率
  6. 28 March 2019
  7. android模拟全局按键,android命令行模拟输入事件(文字、按键、触摸等)
  8. 京东的商品搜索功能是如何实现的_【干货小知识】京东商家如何优化搜索流量?...
  9. 手把手教Linux驱动4-进程、文件描述符、file、inode关系详解
  10. list中抽出某一个字段的值_使用LINQ获取List列表中的某个字段值