线程中使用ClientSocket,采用哪种模式效率比较高?(blocking or nonblocking)(100分)

  • 主题发起人 主题发起人 ludao
  • 开始时间 开始时间
L

ludao

Unregistered / Unconfirmed
GUEST, unregistred user!
对方服务器(短连接模式,即:收到一个请求,处理后马上断开)!
故,我(客户端)采用多连接模式,即一个线程里建立一个连接.
请问,我在线程里建立的clientsocket是采用nonblocking模式,excute中采用代码:
while not Terminated do
begin
application.ProcessMessages;
end;
还是,采用blocking模式,excute中采用代码:
procedure TMyClientThread.Execute;

var
TheStream: TWinSocketStream;
buffer: string;
begin
{ create a TWinSocketStream for reading and writing }
TheStream := TWinSocketStream.Create(ClientSocket1.Socket, 60000);
try
while (not Terminated) and (ClientSocket1.Active) do
begin
..........
end;
finally
end;
end;
哪种效率更高?
 
阻塞式效率比非阻塞式高,但阻塞式比非阻塞式耗资源。
 
您的意思是不是说,如果机器配置比较好的话,最好用阻塞模式?谢谢!
 
ego:
应该是非组塞比组塞效率高,而且非组塞比组塞节约资源,组塞只是编码方便而已。
不建议在线成中用TClientSocket的非组塞模式。
 
呵呵,我觉得连接规模较小时,应该是阻塞式响应数据比较及时些,所以处理数据的速度应该比非阻塞式高。不过,阻塞式如果涉及到线程池的管理,也麻烦。
当然,张无忌说的是对的。 :)
 
to 张无忌:
有个问题我一直疑惑,既然非组塞比组塞好,那为什么delphi的
标准网络组件是组塞的,而不是非组塞的?
 
组塞方式容易封装成跨平台,DELPHI为了跨平台兼容LINUX所以就使用组塞方式。
由于组塞方式是各个平台通用,所以效率和速度都一般(和平台相关,在BSD下
组塞方式效率很高,这是内核决定的),在WIN下是非组塞模式的效率速度较好,
尤其是Winsock2下。
 
无忌兄,有没有线程中使用非阻塞模式的例子?当然,不一定非得使用clientsocket!使用别的socket客户端也可!
谢谢先!:)
 
后退
顶部