关于多线程的讨论...

PctGL 2006-10-20 01:54:00
我比较擅长使用VB,所以此题目就发到VB区了
这个题目是讨论多线程,或许和VB无关,但是由VB引起的...

问题是这样:
windows 对多线程是怎么管理的?
是排成队列平均分配时间,依次执行;还是随机执行???

对以下 1 和 2两个观点哪个更贴近本质一点?
1.多线程只不过是多占用CPU,浪费资源的做法,速度根本提不高
2.第2个言论如下:
1 2 3 4 5 6 前面6个数字代表6个程序(单线程),无论哪个线程占用了100%CPU时间,系统都还要继续执行另外的5个,并不是只执行那1个了; windows 多线程编程的含义就是抢占资源,让程序以高效率完成任务,假如你的程序是多线程(比如说是2个线程,那么一共是7个线程了),那么CPU要花 2/7 的时钟周期来做你的任务,别的只做1/7,可以这样说,线程越多执行速度越快,因为你更多的利用(占用)了CPU时间这样说来,如果你的程序有5个线程,系统中总线程数达到 10 个,那么将会有 1半的CPU时钟周期被你使用这就是多线程带来的好处;这种多线程的方式在windows这样的非标准多线程系统中,优势显得尤为突出

以上两个言论,请大家评价一下,哪个更贴近windows多线程运行方式的本质
第 2 个言论多少有点过激,但反应的是一个方式;请大家多多给点意见
...全文
503 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2010-06-22
  • 打赏
  • 举报
回复
《Windows核心编程》
《深入解析Windows操作系统-Windows Internals》
bcrun 2010-06-22
  • 打赏
  • 举报
回复
我的I3CPU是四线程的,用activexexe多线程挺好的:)
舉杯邀明月 2010-06-22
  • 打赏
  • 举报
回复
-_-!!!

............
jinjie412 2010-06-22
  • 打赏
  • 举报
回复
学习 那份
vbnini 2010-06-22
  • 打赏
  • 举报
回复
原来这是4年前发生的事情呀,师傅
a1875566250 2010-06-22
  • 打赏
  • 举报
回复
我也围观一下横跨近4年的喷贴。
yimins 2010-06-22
  • 打赏
  • 举报
回复
不明真相的群众前来围观大哥被人狂喷!!!
PctGL 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 blackfacewa 的回复:]

两派都说的是对的,不过都走了极端!

1:楼主是想讨论,多线程是否能够提高他自己的程序的执行效率!
答案是肯定的,不过这样做的肯定要牺牲cpu的切换时间,而且要损失其它进程中的线程的执行效率。因此一般来讲不会这么干的。

2:其它几位达人是从,系统cpu的效率来考虑的,从系统的角度来讲,楼主的多线程属于抢占系统资源,这样做并没有提高整个系统的效率,反而会影响系统的效率,但是这里有……
[/Quote]

终于看到明白人了,接贴的人根本没理解我讨论的方向,一味的强调他们说的,他们知道的,我也很无奈,最后帖子成了那样,真是很不爽
PctGL 2010-06-21
  • 打赏
  • 举报
回复
讨论讨论也无妨

对于06年时我的认识,从现在来评判的话,似乎差距也不是很大

只是明确了 win32在线程调度上的规则

有些朋友可能误会了我当时对这个帖子讨论的论点,其实我只是想单纯的讨论下多线程的优势

并没有说应用上到底有怎样的差距,当时讨论的基础是单核cpu,其实就算是现在的多核情况下,

差别也不是很大


在别处讨论多线程的问题时,我这样给别人说过我对多线程的认识:

[Quote=me]

讨论讨论也无妨

对于06年时我的认识,从现在来评判的话,似乎差距也不是很大

只是明确了 win32在线程调度上的规则

有些朋友可能误会了我当时对这个帖子讨论的论点,其实我只是想单纯的讨论下多线程的优势

并没有说应用上到底有怎样的差距,当时讨论的基础是单核cpu,其实就算是现在的多核情况下,

差别也不是很大


在别处讨论多线程的问题时,我这样给别人说过我对多线程的认识:



1,双核CPU,是否比较适合运算多线程的程序??

核多了cpu的运算能力自然增加,就象一个人做一件事要用10分钟,2个人只要5分钟一样,一个道理。


2,程序中使用多线程是否一定能加快程序的运行速度??
比如将第一个变量分为4份,然后用四个线程一起计算。可不可以加快速度??
如果确定可以加快速度,那分为多少个线程最为合适???

对于单个程序,用多线程可以但也不一定能增加多少运行效率,具体情况还要看你的程序到底执行的是什么样的任务,比如网络下载,那么恰当的使用多线程可以提高将近15%的运行效率,这基本上就是极限了。 这里不以分段下载做比较,而是整体效率而言。

将一个变量分成4份来运算,如果代码结构得当,而且专门设计为4线程同时计算,那么是可以得到适当的效率提高的。不过一般不可能超过8%, 估计在2~5% 甚至更低

自己的程序要分配多少个线程,首先看你用多少,其次做程序不要光考虑自己,一个配置比较低的系统运行500个线程和运行1000个线程,速度肯定是不一样,基于以上两点你该知道自己用多少合适,不过拥有的线程越多得到的cpu总时长也就越长,这样就形成了很明显的抢占式。

3,不同的线程调用程序中同一个子函数,是否会造成数据混乱??
这个问题上面有人说了, 对于全局变量的影响最为明显,多个线程虽然不一定会同时都在执行你指定的函数,但你也不能肯定某个线程在什么时刻会切换到别处,导致你的全局变量数据的赋值混乱,对于线程的同步,用临界点api来解决再方便不过了。



系统不会给进程分配cpu时间,然后再让进程去自己分配cpu时间,这是概念错误
进程是虚拟的,是一个逻辑的存在。
系统分配线程时间不分进程,只在线程中存在,分配关系存在一个规则:优先级高的,紧迫性强的(请求立刻执行的次数)


创建线程的过程确实比较浪费时间。线程切换的时间没有传说中那么让人接受不了
再一个cpu执行周期内所完成的线程切换次数,虽然比不了天文数字但也足够多了
一般情况下,cpu的时间片为20ms


多线程的优势是单线程比不了的,看看多核cpu的发展就知道了,不过一味的增加自己的或不管哪个进程的,给系统带来的负担是很大的,用户感受的强烈的。。。
[/Quote]

zdingyun 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 myjian 的回复:]
..........居然没看到还有这样一个坟帖啊.
[/Quote]
今二次览本帖,刚看明白,那是N年前的老帖呀.都过去了,想必当事人对此问题的看法也有了新的看法.
建议LZ把老帖结了.
a1875566250 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 myjian 的回复:]
..........居然没看到还有这样一个坟帖啊.
[/Quote]

郁闷,忘记看了是个坟。。。
嗷嗷叫的老马 2010-06-21
  • 打赏
  • 举报
回复
..........居然没看到还有这样一个坟帖啊.
a1875566250 2010-06-21
  • 打赏
  • 举报
回复
呃,额,为啥我又看到多线程的吵架贴了,俺垃圾就不掺和了。。。免得。。。
多线程只是为了在一个进程里面实现多个对于CPU资源来说“异步”的任务而已,而关于效率的问题,其实可以忽略不计的,首先目前的CPU处理能力,任何时候都有可操作的时间,Windows内部的控制也是很好的,不然Windows发展那么多年可以说是废了。。。

PS:此帖在VBGOOD有点讨论的意义,但在CSDN就算了。。。
blackfacewa 2010-06-21
  • 打赏
  • 举报
回复
两派都说的是对的,不过都走了极端!

1:楼主是想讨论,多线程是否能够提高他自己的程序的执行效率!
答案是肯定的,不过这样做的肯定要牺牲cpu的切换时间,而且要损失其它进程中的线程的执行效率。因此一般来讲不会这么干的。

2:其它几位达人是从,系统cpu的效率来考虑的,从系统的角度来讲,楼主的多线程属于抢占系统资源,这样做并没有提高整个系统的效率,反而会影响系统的效率,但是这里有个前提:就是当前cpu没有任何的空余时间片。

至于,帖子中双方的举例,其实多线程的初衷就是为了解决,在cpu存在大量的空余时间片的时候,用多线程来使用这些时间片,不至于被浪费掉!!

因为,双方是站在不同的立场来分析多线程,答案肯定是不能统一的!!!


看来大家是因为沟通有问题哦!!
viena 2006-10-25
  • 打赏
  • 举报
回复
仍然是对除楼主以外的人说:

可以试一下,多线程下载,保持正常优先级,
开30个线程,假设网速不慢,看看CPU使用率是不是会变成100%
viena 2006-10-25
  • 打赏
  • 举报
回复
//那你一边看网页一边用flashget下载是砸自己脚,你承认吗?
你认为flashget是靠多线程来抢CPU时间吗?

你用flashget开很多线程下载的时候,看一下其CPU占用是否很高?是否影响你其他正常操作?

相反你自己写一个开很多个线程的纯CPU运算(比如死循环)的程序,看一下什么效果,再与我的话印证一下就知道了~

声明:上面的话,不是对楼主说的,只希望其他看帖的人不要被楼主误导
viena 2006-10-25
  • 打赏
  • 举报
回复
我服了,
本来还抱一线幻想说服楼主
现在只希望其他看到此帖的人能明白就好了~
吾非大神 2006-10-25
  • 打赏
  • 举报
回复
不管怎么着
还是学到了不少

不过楼主确实该熄熄火啊?!在吵就没人喽
迈克揉索芙特 2006-10-25
  • 打赏
  • 举报
回复
别丈着会写几句VB代码就觉得自己很了不起好吗?
学学什么是C,windows的实现原理,工作机制!!!
学学!!!!再来教别人!!!
-----------------------------------------------------------------
请楼主教教大家
PctGL 2006-10-25
  • 打赏
  • 举报
回复
你们抓不住问题的重点,给我胡拽这 P...
那P...
有毛病,还有就是爱吃猪肉的那个2,愣头愣脑,瞎缠呼
我有涉及到线程优先级的问题吗?

>>
如果是多人用一个系统(比如以前一个小型机连多个终端),抢占还有点可能,但也是不道德的做法;问题是Windows是PC(个人机)上的操作系统,所有程序都是你自己的程序;你用一个耗时的任务去抢占别的程序的时间简直是搬起石头砸自己的脚,太荒唐可笑了~
--------------------------
我只是说多线程的本质;或者说是多线程实现起来的原理
并不一定是个程序都来个多线程
那你一边看网页一边用flashget下载是砸自己脚,你承认吗?

你们连最起码的 进程 和 线程的 概念都不动,还跟我说什么??
搬一大堆,没用的话跟我理论??我真是服了你们了,特别是那些产卵的
如果你们能多少用点词来描述一下也行;说我没逻辑?
说我没逻辑的人,你自己好好看看我的题目;好好看看什么叫进程;什么叫线程!
别丈着会写几句VB代码就觉得自己很了不起好吗?
学学什么是C,windows的实现原理,工作机制!!!
学学!!!!再来教别人!!!
加载更多回复(24)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧