能力值:
( LV2,RANK:10 )
|
-
-
2 楼
《Windows网络与通信程序设计》,王艳平的。里面有详细的介绍
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
除非用IOCP完成端口,线程上阻塞和非阻塞区别不大
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
针对多客户端,个人建议用非阻塞,效率好些。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
如果你的每个线程的传输数据都是繁忙的饱和的那到没有什么,看业务
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
线程的挂起,唤醒,我可以控制啊!
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
为什么说,效率会好些呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
正在学,看到第4章,感觉好像教怎么写服务器程序的书
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
windows 网络编程,使用IOCP。 完成端口来处理。 具体的代码可以参考 gh0st
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
我觉得上面回答都有点不对。
你要想想我们为什么要使用多线程。
1:我们cpu不只是一个,用多线程一般来说效率高。
2:单个线程已经不能满足需求或者导致效率不高(比喻阻塞)
3:方便业务的区分。
。。。。。。。。。。。
所以最好弄明白为什么要用多线程。才能比较出该用多线程和单线程。
阻塞和非阻塞区别无非是是否会阻塞当前所在的线程。
你用阻塞多线程或者单线程 或者 非阻塞单线程或者别的都是根据你需求来定。没有绝对优势和绝对弱势。
你觉得你开5个线程还是开一个线程读取读取 1kb的文件 哪个效率要高呢。
你觉得你开5个线程还是开一个线程读取1g的文件哪个效率要高呢。(cpu > 1)
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
第一,我的服务端有很多文件可能要读写,并不是集中在一个文件上。
第二,我的服务端会变成一个处理任务的分发汇集中枢。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
我现在编程用的是最基本的阻塞模型,服务端每个socket我用的是一个线程来处理的(因为对于每个客户端来说发出的请求是串行的,并不是同时多个,所以一个线程基本够用,对多客户端并发,正好用多线程来解决)。目前没发现啥问题。(或许将来会有问题,但目前不知道)
每个线程分配一个socket来处理在一般情况下是没啥问题的。特殊情况下有问题
1、客户端数量多了的话,线程数攀升,影响处理效率;
2、很多线程处于等待状态(比如调用阻塞的recv),浪费资源;
3、从高性能的角度来考虑的话,线程的创建销毁成本也是不容忽视的;
我看书上的非阻塞模型。貌似是在单线程的情况下使用的。(当然,有好多种做法)
非阻塞模型相对于上面提到的多线程阻塞模型,一个最大的改进就是能在一个线程内处理多个socket,书上用单线程来说明这个问题是合理的。但是这并不意味着一定要单线程,合理的多线程能提高非阻塞的效率。
就我所使用的阻塞模型多线程处理来比较,与非阻塞模型孰优孰劣?是怎么回事?
阻塞模型在多客户端的场景或商业应用下,基本不具备实用价值。非阻塞中select<async_select<event_select overlapped CompletionRoutine<IOCP
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
那如果我做线程控制呢?IOCP貌似用一个链表把socket处理线程都管起来了(我看书上好像是这样)。我也可以自己做一个这样的功能。当然,它那个是依赖API的,性能会好不少。但我自己做的不依赖API。这有用吗?
//说实在的我真的不知道unix下这种是怎么解决的!?不过我目前做windows下的,天知道有没有移植的一天。但我目前还是用尽量少依赖API的做法。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
完成端口是内核对象,不是你用什么数据结构什么设计方式就能达到的。要追求高效率,必须使用操作系统的接口,linux也是一样。
windows上用完成端口,linux上用epoll。
或者用boost等第三方库的网络组件,对上层的接口统一,但是下层的实现和操作系统相关。
|
|
|