免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
51 [报告]
发表于 2008-11-24 13:39 |只看该作者
原帖由 chary8088 于 2008-11-24 10:36 发表
现在的PC也是单CPU多核的了,如果设计的好的话多线程应该比单线程有优越性的


为了多线程而多线程
为了多核而多线程

论坛徽章:
0
52 [报告]
发表于 2008-11-24 13:50 |只看该作者
原帖由 system888net 于 2008-11-24 13:19 发表


大体是对的,补充一下:
  对数据库的读和写是不一样的
  1 读:   select ...
  2.写:   insert , update, delete

  对于select 用好多thread是可行的.
  对于无关联的insert用好多thread是可行的.
  ...

可关键是往往数据库操作可不单单仅是某一种类型的,比如你这个操作是select,下个是insert,不可能你select的时候是多线程,而insert操作的时候就干掉别的线程留下一个单线程吧?
实际上不仅仅是数据库,所有IO读写操作均如此,光读的话,多线程自然可行,可实际是,极少会让你只读,大部分情况下,都是读写混杂,所以,我这样以为,一般情况下,除非只读,否则最好适用单线程

论坛徽章:
0
53 [报告]
发表于 2008-11-24 16:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
54 [报告]
发表于 2008-11-24 17:47 |只看该作者
原帖由 alexhappy 于 2008-11-24 12:47 发表

这个不尽然吧?假如我们只考虑单CPU情况,那么,单线程非阻塞不一定比多线程非阻塞好,我觉得大多数时候,只要线程数适当,多线程非阻塞的性能会比单线程非阻塞的性能要好
我现在有两种想法,互相对立。。。 ...


你没明白上面说的非阻塞是什么意思
与其在这里瞎想,不如去看看epoll和aio,iocp是怎么回事

论坛徽章:
0
55 [报告]
发表于 2008-11-24 17:49 |只看该作者
原帖由 思一克 于 2008-11-24 12:39 发表
具体例子, 比如你编写一个FTP服务器, 用什么?


select

论坛徽章:
0
56 [报告]
发表于 2008-11-24 18:08 |只看该作者
原帖由 wishel 于 2008-11-24 17:47 发表


你没明白上面说的非阻塞是什么意思
与其在这里瞎想,不如去看看epoll和aio,iocp是怎么回事

为何说我没明白非阻塞的意思?
epoll ,aio,iocp哪一个我都用的很熟。。。。
反道是,我都不理解你的非阻塞是什么意思了,依然拿数据库操作打比方,我向数据库提交了一个查询操作(非阻塞)后立即返回,此时进行一些运算处理,然后,等待查询操作的结果
敢问,若此时查询操作依然未完成,或者,我提交操作之后不进行运算而是立即等待结果,你岂不是依然阻塞在这里等待查询操作的返回???
那此时阻塞跟非阻塞有何区别?(或许,它只是在“等待”过程中不耗CPU时间罢了)

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

论坛徽章:
0
57 [报告]
发表于 2008-11-24 20:32 |只看该作者
原帖由 alexhappy 于 2008-11-24 18:08 发表

为何说我没明白非阻塞的意思?
epoll ,aio,iocp哪一个我都用的很熟。。。。
反道是,我都不理解你的非阻塞是什么意思了,依然拿数据库操作打比方,我向数据库提交了一个查询操作(非阻塞)后立即返回,此时进 ...


就这句话“单线程非阻塞只是跟单线程阻塞的说法不同而已,其实它就是阻塞的”,我认为你没明白非阻塞的意思
其实epoll ,aio,iocp真正的意义并不是非阻塞,而是异步
即发出io请求后不阻塞等待,而是可以做其他的事情,实现并发。这和多线程所实现的并发是一样的,但是少了线程切换和同步成本。
关键是并发,io和cpu并行

你说的数据库查询,从并发的角度来看就很明白了。如果你用阻塞方式,单线程无法实现并发。
所以有两种方式实现并发服务:多线程或者单线程异步

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
58 [报告]
发表于 2008-11-24 21:59 |只看该作者
原帖由 wishel 于 2008-11-24 17:49 发表


select

只用select?
一个在写,其他人都等着吧。。呵呵。

论坛徽章:
0
59 [报告]
发表于 2008-11-24 23:06 |只看该作者
原帖由 yangsf5 于 2008-11-24 21:59 发表

只用select?
一个在写,其他人都等着吧。。呵呵。


fcfs,排队不行么,呵呵

论坛徽章:
0
60 [报告]
发表于 2008-11-24 23:28 |只看该作者
原帖由 alexhappy 于 2008-11-24 13:50 发表

可关键是往往数据库操作可不单单仅是某一种类型的,比如你这个操作是select,下个是insert,不可能你select的时候是多线程,而insert操作的时候就干掉别的线程留下一个单线程吧?
实际上不仅仅是数据库,所有 ...


说的没错,实际情况会复杂一些,所以在对数据库的相关应用的多thread更要评估一下实际的情况,针对性强才能更好的解决问题.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP