请教indy10 中TIdSchedulerOfThreadPool组件用法 |
答題得分者是:GrandRURU
|
zhweizw
一般會員 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
各位大大,小弟用在使用indy10 IdSchedulerOfThreadPool组件时遇到问题,请指点迷津
小弟以前做服务器端使用IdTcpServer时经常与IdSchedulerOfThreadDefault组合,最近学习使用IdSchedulerOfThreadPool组件,我的使用方法是: 1、将IdTcpserver.Scheduler属性指向IdSchedulerOfThreadPool组件; 2、IdSchedulerOfThreadPool组件属性设置:Poolsize:=5 MaxThreads:=50 服务器端运行程序后,若客户端连线超过5条,服务器会自动创建新的线程。但问题是,当有客户端断开连线时,服务器端的线程也随之减少,并不像我期待的那样“服务器端自动把空闲的线程放入Pool备用”,这样一来,IdSchedulerOfThreadPool起不到线程池的作用了,问题出在什么环节呢?是不是使用IdSchedulerOfThreadPool组件时需要编写其他代码? 请大大指教,不胜感激! |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
IdSchedulerOfThreadPool把它的poolsize設大一點就可以了,不是嗎?
請參閱: http://www.77di.com/f2/25860.html ===================引 用 zhweizw 文 章=================== 各位大大,小弟用在使用indy10 IdSchedulerOfThreadPool组件时遇到问题,请指点迷津 小弟以前做服务器端使用IdTcpServer时经常与IdSchedulerOfThreadDefault组合,最近学习使用IdSchedulerOfThreadPool组件,我的使用方法是: 1、将IdTcpserver.Scheduler属性指向IdSchedulerOfThreadPool组件; 2、IdSchedulerOfThreadPool组件属性设置:Poolsize:=5 MaxThreads:=50 服务器端运行程序后,若客户端连线超过5条,服务器会自动创建新的线程。但问题是,当有客户端断开连线时,服务器端的线程也随之减少,并不像我期待的那样“服务器端自动把空闲的线程放入Pool备用”,这样一来,IdSchedulerOfThreadPool起不到线程池的作用了,问题出在什么环节呢?是不是使用IdSchedulerOfThreadPool组件时需要编写其他代码? 请大大指教,不胜感激! |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
你好,你所指的斷開連線是正常的close連線,還是不正常的,如:把網路線直接拉下來?
理論上正常close的連線應該會釋放。而異常的斷線則可能要等至少2MSL(Max Segment Lifetime)的時間才會偵測到斷。 此外,若你目前已是8個thread,而你的pool是5,那斷線的那條thread是非pool的那個socket,則pool當然是沒釋放。若斷的是pool上的socket,除非是不正常的斷線,否則sokcet會被釋放,並且讓此thread 可再被度被利用。 ===================引 用 zhweizw 文 章=================== 当有客户端断开连线时
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2011-05-03 23:06:53, 註解 無‧
|
zhweizw
一般會員 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
大大您好,可能是我没有把问题描述清晰,我再重新描述一遍:
SchedulerOfThreadPool属性设置:PoolSize:=5;MaxThreads:=50; 服务器端执行后,会自动创建5条Thread用来处理客户端数据,这5条Threads应该属于Pool,对吗?此时若客户端连线不大于5条,服务器端不会再创建新的Thread,若大于5条,每增加一个客户端连线,服务器端就会同时增加一个Thread。 现在的问题是,无论客户端连线是否超过了PoolSize设定的数量,只要有客户端断开连线(正常断开),Pool里面的Thread就会随之减少,若所有客户端都断开连线了,Pool里面Thread就是0条了,这样的SchedulerOfThreadPool 就没有了ThreadPool的功能了,为什么会这样呢?按照我的理解,客户端断开连线后,Socket可以被释放,但Thread应该放入Pool里面处于Suspended状态,待有新的的客户端连线的时候,从Pool里面Resume重新使用。但是SchedulerOfThreadPool并没有按照我想象的方式工作,是不是 使用这个元件另需编写代码? ===================引 用 aftcast 文 章=================== 你好,你所指的斷開連線是正常的close連線,還是不正常的,如:把網路線直接拉下來? 理論上正常close的連線應該會釋放。而異常的斷線則可能要等至少2MSL(Max Segment Lifetime)的時間才會偵測到斷。 此外,若你目前已是8個thread,而你的pool是5,那斷線的那條thread是非pool的那個socket,則pool當然是沒釋放。若斷的是pool上的socket,除非是不正常的斷線,否則sokcet會被釋放,並且讓此thread 可再被度被利用。 ===================引 用 zhweizw 文 章=================== 当有客户端断开连线时 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
請問你用的是indy10.?版?
有沒有試著更新版本呢? ===================引 用 zhweizw 文 章=================== 大大您好,可能是我没有把问题描述清晰,我再重新描述一遍: SchedulerOfThreadPool属性设置:PoolSize:=5;MaxThreads:=50; 服务器端执行后,会自动创建5条Thread用来处理客户端数据,这5条Threads应该属于Pool,对吗?此时若客户端连线不大于5条,服务器端不会再创建新的Thread,若大于5条,每增加一个客户端连线,服务器端就会同时增加一个Thread。 现在的问题是,无论客户端连线是否超过了PoolSize设定的数量,只要有客户端断开连线(正常断开),Pool里面的Thread就会随之减少,若所有客户端都断开连线了,Pool里面Thread就是0条了,这样的SchedulerOfThreadPool 就没有了ThreadPool的功能了,为什么会这样呢?按照我的理解,客户端断开连线后,Socket可以被释放,但Thread应该放入Pool里面处于Suspended状态,待有新的的客户端连线的时候,从Pool里面Resume重新使用。但是SchedulerOfThreadPool并没有按照我想象的方式工作,是不是 使用这个元件另需编写代码? ===================引 用 aftcast 文 章=================== 你好,你所指的斷開連線是正常的close連線,還是不正常的,如:把網路線直接拉下來? 理論上正常close的連線應該會釋放。而異常的斷線則可能要等至少2MSL(Max Segment Lifetime)的時間才會偵測到斷。 此外,若你目前已是8個thread,而你的pool是5,那斷線的那條thread是非pool的那個socket,則pool當然是沒釋放。若斷的是pool上的socket,除非是不正常的斷線,否則sokcet會被釋放,並且讓此thread 可再被度被利用。 ===================引 用 zhweizw 文 章=================== 当有客户端断开连线时 |
zhweizw
一般會員 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
那…暫時可能沒人能回答這個問題了
不過你可以試著到 http://tech.groups.yahoo.com/group/Indy-Dev-Public/ Indy 開發團隊的Yahoo Groups去提問 應該就能夠得到解決了 Good Luck! ===================引 用 zhweizw 文 章=================== 我是在delphi 2010 环境下,使用indy10.5.5版本测试的 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |