免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: alexhappy
打印 上一主题 下一主题

你经常使用多线程吗? [复制链接]

论坛徽章:
0
61 [报告]
发表于 2008-11-25 07:17 |只看该作者
能够用单线程解决的绝不用多线程,太难搞了

论坛徽章:
0
62 [报告]
发表于 2008-11-25 09:07 |只看该作者
原帖由 wishel 于 2008-11-24 20:32 发表


就这句话“单线程非阻塞只是跟单线程阻塞的说法不同而已,其实它就是阻塞的”,我认为你没明白非阻塞的意思
其实epoll ,aio,iocp真正的意义并不是非阻塞,而是异步
即发出io请求后不阻塞等待,而是可以做 ...

我当时是说我脑子里有两种不同的想法,它们互相对立,并不是说我就是这样认为的,我只是把更多的想法说出来而已。。。。
而且你仔细看一下我的帖子,我的意思是说,非阻塞(或者你说的是为了实现异步)操作,发出IO请求后确实可以做其它的事情,可如果你这些事情做完之后,那个IO请求还未完成时,而你又要取结果,那你岂不会“等”(阻塞)在这里?或者,想的极端点,你发出异步IO之后,立即取结果,那么这个阻塞有什么区别?

[ 本帖最后由 alexhappy 于 2008-11-25 10:04 编辑 ]

论坛徽章:
0
63 [报告]
发表于 2008-11-25 10:32 |只看该作者
原帖由 alexhappy 于 2008-11-25 09:07 发表

我当时是说我脑子里有两种不同的想法,它们互相对立,并不是说我就是这样认为的,我只是把更多的想法说出来而已。。。。
而且你仔细看一下我的帖子,我的意思是说,非阻塞(或者你说的是为了实现异步)操作,发 ...


不想争论你说的对不对。你把阻塞又给重新给了个定义,按你的理解也可以这么说。

但是前面讨论的核心问题不是在这个用词上,是并发语义。我对你的数据库例子回答了并发语义的问题,为什么不见你对此的意见?
我想我们上论坛的目的是讨论什么是对的,而不是争论谁是对的。
最近遇到太多争这个面子的,累了。

论坛徽章:
0
64 [报告]
发表于 2008-11-25 10:51 |只看该作者
原帖由 wishel 于 2008-11-25 10:32 发表


不想争论你说的对不对。你把阻塞又给重新给了个定义,按你的理解也可以这么说。

但是前面讨论的核心问题不是在这个用词上,是并发语义。我对你的数据库例子回答了并发语义的问题,为什么不见你对此的意见 ...

no,no,no我也并不是特地要去争论谁对谁错,只是想把问题给弄明白
我对你并发语义的回答没有任何异议,很赞成,所以我就没有提了,只是将我有疑问的地方提出来。。。。

PS: 这里是学习讨论的地方,我从未想过要在这里与人一争高下,我只是从内心里尊重各位,尊重知识,so,如果我的反问句语气不当或者让人心烦,也请各位谅解

论坛徽章:
0
65 [报告]
发表于 2008-11-25 11:24 |只看该作者
多线程是比较难弄,基于当前CPU共总线的线构,效果不会太明显!

论坛徽章:
0
66 [报告]
发表于 2008-11-25 12:13 |只看该作者
原帖由 alexhappy 于 2008-11-21 17:07 发表
哎,回到原题吧

多线程到底是用在CPU密集型程序中还是用在IO密集型程序中?两者到底有何不同呢?


在单处理器的系统中,CPU密集型的程序不应该使用多线程。但在多处理器的系统上,应该能提高程序的并行性,更好的利用系统的资源,前提是有多个CPU密集型的任务,或者你的CPU密集型的任务在逻辑上可并行处理。

IO密集型任务,也要看情况,如果IO设备已经非常忙了,用多个线程也没用,如果是有多个设备,而一个任务需要顺序操作这些IO设备,那可以利用多现成来实现多任务的并发。使用单线程会导致其它任务排队时间过程,且IO设备不能最大化的利用。

对于CPU计算和IO访问都有的程序(这也是大多数程序的情况),在有多个处理任务的时候,如果单线程,会导致任务排队,且阻塞在耗时的IO操作上,而CPU利用率不足,在这样的情况下应该使用多线程。

论坛徽章:
0
67 [报告]
发表于 2008-11-25 14:18 |只看该作者
原帖由 jizhao 于 2008-11-25 12:13 发表


在单处理器的系统中,CPU密集型的程序不应该使用多线程。但在多处理器的系统上,应该能提高程序的并行性,更好的利用系统的资源,前提是有多个CPU密集型的任务,或者你的CPU密集型的任务在逻辑上可并行处理 ...


简单点用多进程不就行了吗,为什么非要用多线程

论坛徽章:
0
68 [报告]
发表于 2008-11-25 16:53 |只看该作者
我觉得假如考虑并发性能, 处理批量的数据使用多线程序的效果更好的,  比如一个多线程的网络服务器可以通过可以对每个client 给建立一个连接来进行并发, 这样性能更好的,

论坛徽章:
0
69 [报告]
发表于 2008-11-25 16:57 |只看该作者
使用多线程有的时候很消耗CPU的,还会引起死锁的, 难以调试,  不过也可以用多进程来代替的:wink:

论坛徽章:
0
70 [报告]
发表于 2008-11-25 17:00 |只看该作者
原帖由 axjh03 于 2008-11-25 16:53 发表
我觉得假如考虑并发性能, 处理批量的数据使用多线程序的效果更好的,  比如一个多线程的网络服务器可以通过可以对每个client 给建立一个连接来进行并发, 这样性能更好的,

如果有10000个client呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP