首页
社区
课程
招聘
[讨论]所谓socket编程中的堵塞模式,如果使用多线程来处理每个recv或send是不是就可以改变呢?
发表于: 2013-3-19 15:33 10414

[讨论]所谓socket编程中的堵塞模式,如果使用多线程来处理每个recv或send是不是就可以改变呢?

2013-3-19 15:33
10414
所谓socket编程中的堵塞模式,如果使用多线程来处理每个对服务端进行请求的客户端socket的recv或send是不是就可以改变呢?这样的话,是不是就无所谓堵塞了呢?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 106
活跃值: (579)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
阻塞就是阻,没有无所谓。
2013-3-19 16:03
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
LZ太天真了,服务端只有一个,怎么可能不堵塞?除非增加服务器数量...
打个比方,一个人只有2只耳朵,想听明白10个人同时讲话吗?
2013-3-19 17:14
0
雪    币: 1852
活跃值: (1821)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
4
开个2000个线程,系统就受不了啦。
2013-3-19 17:46
0
雪    币: 66
活跃值: (203)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
堵了就是堵了,得等它通才行,多线程只是不阻塞 UI 线程
2013-3-19 18:08
0
雪    币: 496
活跃值: (291)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
6
阻塞非阻塞只是对一个Socket来说的,即使你开N个线程,你对一个socket的操作也是不能不等待数据处理完毕就返回的,这就是阻塞。

阻塞:recv或者send数据,必须等待数据被处理完毕这些函数才会返回,也叫同步socket。

非阻塞:recv或者send只负责把要处理的数据告诉系统(网络模块)然后就立即返回,至于系统什么时候处理完那就完全是系统的事情了,
那我们怎么知道数据处理完了呢?
1.设置个回调让系统处理完数据的时候调用这个函数
2.或者用事件等同步对象来进行通知。
以上操作就是也叫异步socket
2013-3-19 18:27
0
雪    币: 213
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
对于每个客户端的一个请求,就算异步返回,那也只是程序层面的返回。实际上并没有结果。这种返回,站在结果角度没有意义。因为用户的每个请求,不管被细分为多少个片段,都是以结果为目标的。就算一个返回立刻就得到了,但结果需要异步后1万年,那这个异步与同步有什么分别呢?

诚如,确实每个反应处理都是线程的。

是不是我对这个异步&同步的理解不对呀?
2013-3-19 19:18
0
雪    币: 496
活跃值: (291)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
8
所以说  那个异步同并是对socket的具体操作而言的啊,而不是针对完成一个完整的功能过程。
仅仅是对socket的每一个读写操作。
2013-3-19 19:39
0
游客
登录 | 注册 方可回帖
返回
//