是這樣的:我改別人的原始碼,是搶號軟體
他是這樣弄的:
10個執行緒負責根據不同的條件掃不同的號,15個執行緒負責買號。
10個掃號執行緒掃號,掃到的號放入一個TstringList公共變數中。買號執行緒不停的從該變數取號進而買號。
現在的問題是 不夠快!
我覺得問題是:掃到的號add放進tstringlist中,掃號速度遠遠大于買號速度,這樣,買號執行緒從tstriglist中取號時取得號很可能已經被別人買過了,我怎樣才能取號的時候取最新的號?掃到的號放進一個什么型別的變數中,買號執行緒根據索引順序的取號,才能取到最新號?
或者你有什么不同的看法,都發表一下
uj5u.com熱心網友回復:
掃號速度遠遠大于買號速度那你增加買號的執行緒來處理掃到的號額……
可能由于掃到號后,入佇列,時間長了就無效了, 這個等待, 是由于你買號執行緒處理不過來導致的,
那干脆,我們存掃到的號碼時,不用佇列,用堆疊,這樣,優先處理后掃描到的號
雖然會導致最先掃到的號,會更長時間,甚至是得不到處理,(買號),
可是,已經時間久了,基本也沒意義了吧,直接扔掉……
如果先掃到先拿來買,買號執行緒慢了,就會導致別人已經買走了,你這里只能買不上,買不到,賣完了……
uj5u.com熱心網友回復:
方式:1、一人一次只能取一個號
2、一人一次可取多個(條件)號,再從中選擇一個號。
二者代碼完全不一樣。
uj5u.com熱心網友回復:
取號時取得號很可能已經被別人買過了——這個 別人 是其他人?其他人也在正常或用不同的搶號軟體在買號?
那應該掃到號就由專門的買號執行緒去處理。。。
uj5u.com熱心網友回復:
你目前的設計,不太合理,算起來有25個執行緒訪問同一個stringlist。1、考慮執行緒安全問題,需要處理“鎖”或臨界區——從你的描述看,似乎你的代碼并未做此處理;
2、由于頻繁的“鎖”或臨界區處理,就有大量的系統呼叫(用戶態轉系統態需要占用CPU)而降低整體程式性能;
3、執行緒優先級的考量:掃號執行緒和買號執行緒優先級是否應有所區分?
建議這樣設計:
1、掃號執行緒處理處理結果都提交給一個“號碼提交執行緒”,該執行緒負責寫入TStringList;
2、買號執行緒不直接訪問TStringList取號,而統一通過“取號執行緒”訪問TStringList取號后,逐一給每個買號執行緒發放號碼;
這只是大致流程,里面還有好多細節需要考慮:比如取號后是否需要remove,是否需要判斷重復號等等。有些細節可能會影響性能。
uj5u.com熱心網友回復:
多執行緒下,要以 Tthreadlist 取代 stringlist轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104518.html
標籤:語言基礎/算法/系統設計
上一篇:D2007如何安裝Raize 6
下一篇:求頁游抓包的實作思路
