免费注册 查看新帖 |

Chinaunix

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

通讯时select,读写集为什么都有数据 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2006-02-16 11:00 |只看该作者
是的,这个send buffer在循环中始终是可写的,因此select自然不阻塞了。
具体来说socket的一个套接字会有两个buffer,recv buffer和send buffer。这样在当conn后,sendbuffer始终处于已准备好状态,所以select不会阻塞。当客户端发送来数据的时候,sendbuffer依然会是真,而recv buffer也会返回真。这样就可以解释我前面问的两个问题了。

论坛徽章:
0
22 [报告]
发表于 2006-02-16 11:04 |只看该作者
原帖由 yycfriends 于 2006-2-16 11:00 发表
是的,这个send buffer在循环中始终是可写的,因此select自然不阻塞了。
具体来说socket的一个套接字会有两个buffer,recv buffer和send buffer。这样在当conn后,sendbuffer始终处于已准备好状态,所以select不 ...


,很少有人监测write fds set的,除非是nonblock connect或者类似于数据转发的东西.

论坛徽章:
0
23 [报告]
发表于 2006-02-16 11:20 |只看该作者

回13楼

accpet需要select超时判断?accept本身就是个阻塞函数

论坛徽章:
0
24 [报告]
发表于 2006-02-16 11:23 |只看该作者
很好,随风没有提出反对意见,说明我最后的理解终于上路了。
非常感谢大家的答复,更感谢随风的答复。

相关的问题:最简单的socket通讯程序是用accpt阻塞,来一个客户端请求处理一个,多个客户端的排队处理。为了提高效率,人们fork一个子进程,用子进程来进行业务处理,减少客户端等待的时间。

但在对效率要求很高的情况下,如银行有上千个终端,同时请求的客户端有50多个,这样fork的处理效率又明显不够了,能否应用select解决这样的问题,大概的处理方式又是如何呢?谢谢。

论坛徽章:
0
25 [报告]
发表于 2006-02-16 11:25 |只看该作者
对soul_of_moon:是的,但使用select本意是想提高服务端处理的效率,但能否实现还要看我上面问题的大家的解决情况。

论坛徽章:
0
26 [报告]
发表于 2006-02-16 11:28 |只看该作者
你要干什么?

论坛徽章:
0
27 [报告]
发表于 2006-02-16 11:30 |只看该作者
原帖由 yycfriends 于 2006-2-16 11:23 发表
很好,随风没有提出反对意见,说明我最后的理解终于上路了。
非常感谢大家的答复,更感谢随风的答复。

相关的问题:最简单的socket通讯程序是用accpt阻塞,来一个客户端请求处理一个,多个客户端的排队处理。 ...

进程组+线程池,足够应付的了.

论坛徽章:
0
28 [报告]
发表于 2006-02-16 11:38 |只看该作者
唉,小手就是难过啊。不过还得厚着脸问吧:)
to随风:在c里的线程(java概念)一般称为子进程,因此你上面的说法进程租+线程池,应该是一个概念吧,进程组=线程池。就是多个子进程。事先就fock好。来了数据包后,通过进程间通信把数据包踢给某一个子进程去处理。这样减少了fork的消耗。这样的理解是否正确,请纠正。谢谢

[ 本帖最后由 yycfriends 于 2006-2-16 11:40 编辑 ]

论坛徽章:
0
29 [报告]
发表于 2006-02-16 11:55 |只看该作者

回25楼

这跟效率有什么关系?accept是对一个队列进行操作的,一个请求连接并不影响另一个请求连接。

论坛徽章:
0
30 [报告]
发表于 2006-02-16 11:59 |只看该作者
原帖由 yycfriends 于 2006-2-16 11:38 发表
唉,小手就是难过啊。不过还得厚着脸问吧:)
to随风:在c里的线程(java概念)一般称为子进程,因此你上面的说法进程租+线程池,应该是一个概念吧,进程组=线程池。就是多个子进程。事先就fock好。来了数据包 ...

dead wrong

linux的thread是通过clone实现的,所以可以当一个light weight process 看待.但是支持kernel thread的os里面thread 本身就是调度单元,所以不是子进程.
引入thread poll是为了把service的处理能力增强(如果存在concurrency的话).

2.进程池是你说的意思,引入进程池是为了解决单一process 处理能力和资源分配的bottleneck,比如process pool里每一个process可以对应一个分配给自身的port的通信模型(类似于tuxedo等的处理方式),这个port是有一个特殊的process和client协商来的.

写的太累了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP