免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2008-11-21 17:02 |只看该作者
原帖由 hellioncu 于 2008-11-21 16:48 发表
“为了同步多用户对数据库中同一数据的修改”,LZ用的数据库难道不支持事物?

恩,没有啊,我想,与其让它失败回滚,还不如让它同步操作,一次成功呢。。。。

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

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

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
13 [报告]
发表于 2008-11-21 17:09 |只看该作者

回复 #10 alexhappy 的帖子

呵呵,这样讨论太笼统了。
你最好说明是处理些什么事物,各事物占多少比例;各事物里又要处理哪些逻辑。
这样大家好帮你看看如何分线程才合理或者不分。

论坛徽章:
0
14 [报告]
发表于 2008-11-21 17:11 |只看该作者
已经不太会用多进程了
线程共享数据多方便呐

论坛徽章:
0
15 [报告]
发表于 2008-11-21 17:28 |只看该作者
原帖由 yangsf5 于 2008-11-21 17:09 发表
呵呵,这样讨论太笼统了。
你最好说明是处理些什么事物,各事物占多少比例;各事物里又要处理哪些逻辑。
这样大家好帮你看看如何分线程才合理或者不分。

那么好吧,比如,我有几台Gate Server接收用户的请求,它们只是单单接收请求,然后将将请求转发给另外一台Logic Server,Logic Server呢很明显是多线程的,它将接收前面的Gate Server发
来的数据,然后,进行处理,处理的过程中可能要多次访问数据库,哎,访问数据库的操作,交給另一台Manager Server的,它仅仅用来跟数据库通信,然后返回结果,哎,讲正题了。。。。
汗,以前,那个Manager Server是单线程跟数据库打交道的,那时,数据库操作一般很短,可是现在的情况不一样啦,数据库操作可能会较长,我总不能还单线程跑吧,结果用了多线程,嗯,好
不容易搞出来了,结果,发现效率更低。。。。仔细想想,里面的同步互斥实在是。。。。

论坛徽章:
0
16 [报告]
发表于 2008-11-21 17:30 |只看该作者
原帖由 bleem1998 于 2008-11-21 17:11 发表
已经不太会用多进程了
线程共享数据多方便呐

是啊,但是,好像也共享数据导致的同步也挺麻烦和低效的

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
17 [报告]
发表于 2008-11-21 17:44 |只看该作者
原帖由 alexhappy 于 2008-11-21 17:28 发表
那么好吧,比如,我有几台Gate Server接收用户的请求,它们只是单单接收请求,然后将将请求转发给另外一台Logic Server,Logic Server呢很明显是多线程的,它将接收前面的Gate Server发
来的数据,然后,进行 ...


查询时间长的话想法优化查询,数据库单位时间内能承受的查询是一定的,瓶颈在数据库的话,多线程程解决不了太大问题.

论坛徽章:
0
18 [报告]
发表于 2008-11-21 18:03 |只看该作者
原帖由 xinglp 于 2008-11-21 17:44 发表


查询时间长的话想法优化查询,数据库单位时间内能承受的查询是一定的,瓶颈在数据库的话,多线程程解决不了太大问题.

可是,本来有的操作就较费时间,总不能你就不进行费时的操作了吧?
而且,数据库其实很牛的,你单线程跟它通信,其实,它很嫌弃你没劲。。。。可你用多线程的话,问题又来了,一次逻辑处理可能要数据库操作好几次,更要命的是,如果这次操作的结果依赖于
上次对数据库操作的修改,可数据库中的数据又被其它线程修改,那么,此时,进行的一切操作将失去意义,因为我的操作是针对原数据库的那个值的

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
19 [报告]
发表于 2008-11-21 19:05 |只看该作者
多线程应用于IO密集型,换句话说,存在很多等待操作的应用,数据库操作当然也是其中一种。
多线程的目的就是让处于等待中的CPU干活,而如果CPU密集型的话,CPU本来就一直在干活,根本没必要使用多线程。

比如现在是一个服务器程序,有A和B两个客户端,A和B的数据库操作相互不干扰,A的操作需要10秒,B的操作仅需1秒。如果是单线程,CPU为A干活的时候,B来了,那么B也要等10秒-_-b。但如果使用了多线程,B就只用等1秒就搞定了。

多线程会带来很多同步、互斥、顺序之类问题,这部分务必做好。对于有顺序要求的一系列操作,应该使用队列机制,需要在设计初期将操作划分互不相关的几个组,每一个组使用自己独立的队列。最简单的情况,假设各个客户端相互无关,那么就可以为每一个客户连接创建操作队列,这样既可以保证相互不干扰,又可以保证有序性等等……

现学现卖^_^

论坛徽章:
0
20 [报告]
发表于 2008-11-21 19:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP