首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • windows如何自动分配线程? [已结贴,结贴人:jamesking]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-08-29 17:10:05 楼主
    我想知道windows是如何自动分配线程的。

    假设:我的CPU是双核的。有一个多线程的程序,包含A、B、C三个线程,开始的时候三者的都处于空闲等待状态。Windows会如何分配我的线程?如果windows 将A、B分配到第一个核心上,将C分配到第二个核心上。那么在运行过程中A和B的运算量逐渐变得很大,而C的运算量始终很小。windows是否会自动将A、B中的一个切换到空闲的核心上?

    如果不会自动切换,是否需要用户编程指定A和B采用不同的核心?那对于程序运行在单核CPU上又该如何处理?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-08-30 11:23:271楼 得分:3
    每个进程和线程都有优先级。windows如何分配线程就和如何分配进程一样。本着平等共享的原则。
    当然每个进程和线程也可以编程指定允许调度的cpu。
    另外2个核,3个计算线程的设计不好。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-08-31 11:51:272楼 得分:5
    我说说个人的观点,操作系统有自己的进程调度算法。主要有FIFO,优先数调度算法,时间片轮转调度算法等。操作系统会根据自己的算法去调用要执行的相关进程。关于在多核CPU中是否让线程在多个核之间随意的切换还待研究。也不知道操作系统自己的算法能不能让进行自动的转换到空闲的核上去执行。请高手指路
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-09-01 16:54:393楼 得分:0
    我估计windows可能不支持线程运行态的切换,不知道支不支持线程睡眠态的切换。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-09-02 00:32:054楼 得分:5
    操作系统统计其上运行的线程个数以及各个线程的繁忙程度(繁忙程度只能从该线程的历史运行状况做一个大致的推测),在每次线程切换的时候检查不同CPU之间的work load是否差距过大,如果过大就调整线程的运行CPU,使各个CPU的work load尽量相等。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-09-02 11:43:485楼 得分:0
    楼上的能否说清楚一点:

    1.Windows是否支持运行中的线程从繁忙的核心切换到空闲的核心?
    2.Windows是否支持睡眠中的线程被唤醒时自动从繁忙的核心切换到空闲的核心?

    解释:
    运行中的线程:比如在做一个很长时间的循环do while或for运算。
    睡眠中的线程:比如执行了Sleep或WaitForSingleObjects使自己处于睡眠状态。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-09-02 12:07:016楼 得分:0
    当初Intel的Pentium D和Pentium EE采用的是独立式二级缓存,后来的Core Duo才是两个内核共享二级高速缓存。
    如果操作系统可以切换线程,那么Pentium D和Pentium EE的CPU操作时间肯定要比Core Due要慢,因为二级缓存要重新从内存中读取数据。
    另外多CPU的情况又是如何?因为不同的CPU使用的二级缓存肯定不一样。操作系统可不可以在不同的CPU之间切换线程?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-09-05 12:07:577楼 得分:0
    期盼高手能解答,我在编程中要考虑到这个问题。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-09-07 17:04:248楼 得分:1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-09-12 21:37:389楼 得分:0
    再顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-09-13 15:49:3710楼 得分:1
    路过
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-09-13 16:04:1811楼 得分:4
    程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。

    在多中央处理器的系统里,不同线程可以同时在不同的中央处理器上运行,甚至当它们属于同一个进程时也是如此。大多数支持多处理器的操作系统都提供编程接口来让进程可以控制自己的线程与各处理器之间的关联度
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-09-13 16:44:4212楼 得分:0
    我主要是想问:
    当一个线程被分配在A核心上运行后,是否始终都绑定在A核心上,直到线程结束。
    系统会不会根据各核心的繁忙程度动态调整当前已经分配的线程?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-09-14 14:41:1113楼 得分:1
    接分
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved