indy10线程池问题 indy10 里面的每个客户端都对应一个tidcontext,发送数据的时候 acontext.connection.iohandler.write 或 acontext.iohandler.write connection和indy10里面的线程池有关系么?iohandler 又起什么作用?能说说10里面的线程池的原理么?谢谢大家 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 INDY 10是每个连接一个线程,没有线程池,IOHandler是对SOCKET进行封装。 错!indy10是支持线程池的,indy是一个连接一个线程没错,IndyTcpserver的线程管理创建由其属性Scheduler负责,Scheduler的两个派生类:TIdSchedulerOfThreadDefaultTIdSchedulerOfThreadPool其中,默认(也就是未Scheduler属性的nil的时候)是使用TIdSchedulerOfThreadDefault,他不支持线程池;如果要使用线程池,你就需要自己从indy misc面板拖拉一个TIdSchedulerOfThreadPool控件下来,并将其设定给IndyTcpserver的Scheduler属性。因为indy是一个连接一个线程,因此,最大线程数就由IndyTcpserver的maxConnections决定。当连接关闭是,线程并不会结束,而是挂起(也就是不占用cpu资源),当有新连接进来是,先从线程池中判断有没有挂起的线程,如果有,则唤醒他用来处理这个新的连接,如果没有,则创建一个新线程。无论如何,连接数到达maxConnections是,线程池也无能为力。直接拒绝连接。 ioHandler是专门用量socket读写的,概念上跟线程无关 to truexf那它还是一个连接一个线程哦????这个indy10 tcpserver能支持的客户端数大概是多少呢?? 是的。一个连接一个线程。如果你应用想支持超大并行连接数,用indyserver可能就不合适。虽然线程的资源耗费很少,但总是要耗费资源的。如果你的进程中线程数达到上千个,cpu花在线程切换上的耗费就相当大了。但是普通的socket应用都没有这么大连接数的要求。用indy是可以满足的。另外要明白一点:连接数不等于负荷能力。如果创建1000个连接,而且每个连接的数据传输都很忙碌,那就涉及到硬件资源和网络带宽了。如果负荷不来的话照样崩溃。所以无法简单的说indy能支持多大的并发数是视实际情况而定的。如果真的对并发数要求很高的话,那就不要用indy了。自己用api以完成端口的模式编程,iocp是公认windows上的效能最高的,但是他也只是一个比较好的socket编程模式而已。具体能支持多大的符合总是由各方面因素综合而决定。 truexf说的有道理,我一直认为INDY的线程池是个鸡肋,就算是在INDY 10中加了千程,也不行。如果要实现线程池,建议使用Windows提供的完成端口模型IOCP,这个才是管理SOCKET比较好的方式,也符合线程池的思想。 函数的参数值 传递 丢了!!!? [求助]關於公車罰款的問題 单元与单元之间变量传递,送你十分、祝你十分健康,谢谢参与 简单问题!! 变量取名问题 我写的一个线程类,但是在操作数据很多的时候后,关闭程序时会报错误操作句柄的错误,为什么? 这样的进度条怎么用? 获取WIN7桌面图标名称,我已要抓狂,求助各位大神! delphi中想用个DBLabel设置为带圈的字体? 小调查:这里有多少人愿意在网上合作开发项目? 数据update后 数据库中没更新 什么情况 delphi 2009 的TServerSocket组件在哪 里?
错!
indy10是支持线程池的,indy是一个连接一个线程没错,IndyTcpserver的线程管理创建由其属性Scheduler负责,Scheduler的两个派生类:
TIdSchedulerOfThreadDefault
TIdSchedulerOfThreadPool
其中,默认(也就是未Scheduler属性的nil的时候)是使用TIdSchedulerOfThreadDefault,他不支持线程池;
如果要使用线程池,你就需要自己从indy misc面板拖拉一个TIdSchedulerOfThreadPool控件下来,并将其设定给IndyTcpserver的Scheduler属性。因为indy是一个连接一个线程,因此,最大线程数就由IndyTcpserver的maxConnections决定。
当连接关闭是,线程并不会结束,而是挂起(也就是不占用cpu资源),当有新连接进来是,先从线程池中判断有没有挂起的线程,如果有,则唤醒他用来处理这个新的连接,如果没有,则创建一个新线程。无论如何,连接数到达maxConnections是,线程池也无能为力。直接拒绝连接。
那它还是一个连接一个线程哦????这个indy10 tcpserver能支持的客户端数大概是多少呢??
如果你应用想支持超大并行连接数,用indyserver可能就不合适。虽然线程的资源耗费很少,但总是要耗费资源的。如果你的进程中线程数达到上千个,cpu花在线程切换上的耗费就相当大了。但是普通的socket应用都没有这么大连接数的要求。用indy是可以满足的。另外要明白一点:
连接数不等于负荷能力。
如果创建1000个连接,而且每个连接的数据传输都很忙碌,那就涉及到硬件资源和网络带宽了。如果负荷不来的话照样崩溃。
所以无法简单的说indy能支持多大的并发数是视实际情况而定的。如果真的对并发数要求很高的话,那就不要用indy了。自己用api以完成端口的模式编程,iocp是公认windows上的效能最高的,但是他也只是一个比较好的socket编程模式而已。具体能支持多大的符合总是由各方面因素综合而决定。