Вверх ↑
Этот топик читают: Гость
Ответов: 305
Рейтинг: 4
#1: 2012-07-24 05:36:56 ЛС | профиль | цитата
code_28569.txt

Вот сделал я многопоточный чекер http прокси.
Но есть ошибки:
1)Не запускает сразу n количество потоков. То есть если поставленно 5 потоков то программа сначало запустит к примеру 3, потом через некоторое время 2
2)Начинает виснуть/замедлять создание потоков, когда работает более 20 минут
3)Жёстко виснет, если попадается плохой прокси. В компоненте HTTP_GET такого не бывает
4)Не выдерживает более 10 потоков

Подскажите, что я делаю не так
карма: 0

0
файлы: 1code_28569.txt [4KB] [120]
Ответов: 1841
Рейтинг: 369
#2: 2012-07-24 07:32:38 ЛС | профиль | цитата
mmmmm писал(а):
сделал я многопоточный

Что-то я не вижу в схеме Thread.
Всё работает в основном потоке, вот и виснет/замедляется.
карма: 1
0
Ответов: 305
Рейтинг: 4
#3: 2012-07-24 09:09:24 ЛС | профиль | цитата
Add(Thread,10354083,483,602)
{
Delay=0
FastStop=0
link(onExec,13648027:doNext,[])
}
Add(RichEdit,12100247,700,546)
{
Left=10
Top=25
Width=165
Height=260
Strings=#16:5.9.240.159:8080|19:188.40.141.211:8080|16:78.47.163.165:80|18:46.38.243.233:3128|20:188.138.104.221:3128|16:176.9.44.37:8080|18:176.9.236.157:8080|16:176.9.17.49:3128|18:91.121.91.222:3128|16:78.47.200.106:80|18:178.63.34.189:3128|17:94.23.198.48:3128|17:62.75.229.94:3128|18:37.59.152.121:8080|16:188.40.105.32:80|18:178.18.85.166:3128|17:46.4.253.179:3128|18:94.102.48.179:8080|17:88.198.124.100:80|19:62.154.160.108:3128|13:5.39.15.17:80|18:109.74.154.90:3128|16:46.51.177.191:80|17:46.39.179.33:8080|18:82.77.194.69:54321|17:81.0.207.222:3128|16:54.247.166.65:80|18:79.101.37.133:8080|19:109.228.16.249:8082|17:93.183.194.203:80|17:91.206.6.223:3128|15:91.206.6.223:80|16:91.200.181.82:80|19:89.121.232.211:3128|18:78.92.226.197:8080|19:89.121.232.212:3128|19:89.121.232.210:3128|16:82.78.69.60:8080|19:80.232.198.156:8080|16:80.58.104.160:80|17:213.4.106.85:8080|18:93.170.85.120:8080|18:89.110.209.18:6666|18:90.182.138.74:8000|15:80.58.29.174:80|15:80.58.29.170:80|18:79.120.177.37:8080|18:213.192.60.99:8080|18:188.143.232.239:80|18:188.143.232.239:85|17:80.86.83.213:3128|
ScrollBars=3
}
Add(MultiElementEx,7652017,763,609)
{
Mode=1
link(onEvent1,2839960:doWork3,[(807,615)(807,702)(424,702)])
link(onEventData,6534825:doAdd,[])
}
BEGIN_SDK
Add(EditMultiEx,9746293,21,21)
{
WorkCount=#5:##add|
EventCount=#8:onEvent1|11:onEventData|
Width=755
Height=424
Point(##add)
link(##add,4677762:doValue,[(45,27)(45,244)])
}
Add(TCP_Client,13330691,322,287)
{
link(onRead,2370780:doEvent1,[(376,293)(376,223)])
link(onConnect,13330691:doSend,[(369,300)(369,331)(310,331)(310,307)])
link(onDisconnect,13097564:doEvent1,[])
link(IP,15269884:Part1,[(328,279)(139,279)])
link(Data,15320331:Text,[])
link(Port,15269884:Part2,[(342,279)(146,279)])
}
Add(StrList,15320331,329,224)
{
Strings=#20:GET /ip.php HTTP/1.1|21:Host: tools.hiasm.com|17:Connection: Close|113:User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11|71:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8|52:Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4|48:Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3|0:|0:|
}
Add(StrList,12471515,434,224)
{
}
Add(BlockFind,1462634,434,301)
{
@Color=9360639
IncludeBlock=1
StartBlock="Server: nginx/"
EndBlock="
"
link(onSearch,13261461:doData,[(520,307)(520,314)])
link(Text,12471515:Text,[])
}
Add(Timer,15670083,322,168)
{
@Hint=#43:Через какое Р|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|
Interval=5000
Enable=1
AutoStop=1
Point(doInterval)
link(onTimer,12379018:doEvent2,[(482,174)(482,76)])
}
Add(Hub,14059199,203,238)
{
link(onEvent1,15670083:doTimer,[(269,244)(269,174)])
link(onEvent2,13330691:doOpen,[(269,251)(269,293)])
}
Add(Hub,12379018,609,63)
{
InCount=2
OutCount=1
link(onEvent1,9746293:onEvent1,[(654,69)(654,27)])
}
Add(Hub,2370780,385,217)
{
link(onEvent1,15670083:doInterval,[(411,223)(411,205)(310,205)(310,188)])
link(onEvent2,12471515:doAdd,[])
}
Add(MultiStrPart,15269884,133,238)
{
Char=":"
link(onSplit,14059199:doEvent1,[])
}
Add(Hub,13097564,385,301)
{
link(onEvent1,1462634:doSearch,[])
link(onEvent2,12379018:doEvent1,[(417,314)(417,69)])
}
Add(Memory,4677762,56,238)
{
link(onData,15269884:doSplit,[])
}
Add(DoData,13261461,574,308)
{
link(onEventData,9746293:onEventData,[(667,314)(667,34)])
link(Data,4677762:Value,[(580,293)(580,293)(580,293)(62,293)])
}
END_SDK
Add(MainForm,10598873,210,252)
{
Width=373
Height=415
Caption="Прокси чекер"
}
Add(Button,13777211,227,602)
{
Left=10
Top=320
Width=345
Height=50
Caption="Проверить"
link(onClick,11304990:doFor,[])
}
Add(Label,12355967,581,210)
{
Left=10
Top=5
Width=71
Height=17
Caption="На проверку:"
}
Add(RichEdit,6534825,847,616)
{
Left=190
Top=25
Width=165
Height=260
ScrollBars=3
}
Add(Label,10911149,630,210)
{
Left=190
Top=5
Width=49
Height=17
Caption="Рабочие:"
}
Add(Edit,12430023,371,546)
{
Left=10
Top=290
Text="5"
}
Add(Label,6950492,714,210)
{
Left=65
Top=295
Width=47
Height=17
Caption="Потоков"
}
Add(For,11304990,364,602)
{
Start=1
End=5
link(onEvent,2839960:doWork2,[])
link(End,12430023:Text,[])
}
Add(Str_Enum,7696909,700,609)
{
Delimiter="
"
To=1
Point(doFrom)
Point(doTo)
link(onEnum,7652017:##add,[])
link(String,12100247:Text,[])
}
Add(Hub,6180977,665,609)
{
OutCount=3
link(onEvent1,7696909:doFrom,[(689,615)(689,629)])
link(onEvent2,7696909:doTo,[(689,622)(689,636)])
link(onEvent3,7696909:doEnum,[(689,629)(689,615)])
}
Add(Counter,13648027,539,602)
{
Max=99999999
link(onNext,11013043:doCompare,[])
}
Add(If_else,11013043,602,602)
{
link(onTrue,10024857:doMessage,[(658,608)(658,489)])
link(onFalse,6180977:doEvent1,[])
link(Op1,13648027:Count,[(608,590)(576,590)(576,646)(545,646)])
link(Op2,12100247:Count,[(615,590)(713,590)])
}
Add(Message,10024857,700,483)
{
Message="Готово"
}
Add(HubEx,2839960,420,602)
{
link(onEvent,10354083:doStart,[])
}


Что то не работает
карма: 0

0
файлы: 1code_28570.txt [5.4KB] [327]
Ответов: 1536
Рейтинг: 176
#4: 2012-07-24 09:26:49 ЛС | профиль | цитата
mmmmm, поставь таймер

Add(Timer,2695603,399,462)
{
Enable=1
AutoStop=5
}
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
файлы: 1code_28571.txt [244B] [105]
Ответов: 1841
Рейтинг: 369
#5: 2012-07-24 09:26:50 ЛС | профиль | цитата
mmmmm сейчас уже доделаю упрощённую версию чекера и опубликую.
Там используется недокументированная фича TCP_Server.
Просто добавьте этот элемент в схему и всё заработает.
карма: 1
0
Ответов: 305
Рейтинг: 4
#6: 2012-07-24 12:34:51 ЛС | профиль | цитата
ser_davkin, тоже самое
CriDos, Подождём-с

------------ Дoбавленo в 12.34:
CriDos, передумали?
карма: 0

0
Ответов: 1841
Рейтинг: 369
#7: 2012-07-24 19:18:22 ЛС | профиль | цитата
mmmmm, нет, я на работе;)
------------ Дoбавленo в 19.18:
Фух, я дома!
Вот собственно схемка:

Add(MultiElementEx,7652017,557,238)
{
@Hint=#31:Модуль MultiThreads_Checker_1.0|
Mode=1
link(OnResult,492515:doAdd,[])
link(End,3306489:In,[])
link(get_ip_port,6487186:Var,[])
AddHint(42,-55,184,13,@Hint)
}
BEGIN_SDK
Add(EditMultiEx,9746293,21,21)
{
WorkCount=#5:##add|9:##hdelete|
EventCount=#8:OnResult|3:End|
VarCount=#7:##count|13:##eventHandle|
DataCount=#11:get_ip_port|0:|
Width=923
Height=410
VOffset=80
HOffset=140
Point(##add)
Point(##hdelete)
Point(##count)
Point(##eventHandle)
link(##add,12340182:doWork,[])
}
Add(TCP_Client,13330691,644,345)
{
link(onRead,5366312:doSearch,[])
link(IP,5164727:getVar,[])
link(Data,4312742:Text,[])
link(Port,15287335:getVar,[])
}
Add(LineBreakEx,1738529,218,245)
{
Caption="get_ip_port"
}
Add(Hub,15798467,182,245)
{
link(onEvent1,1738529:doWork,[])
link(onEvent2,10102029:doCompare,[(207,258)(207,326)])
}
Add(MultiStrPart,9752501,419,84)
{
Char=":"
link(Str,8039361:Var,[])
}
Add(LineBreakEx,15429690,426,126)
{
Caption="port"
Type=3
link(_Data,9752501:Part2,[])
}
Add(LineBreakEx,16153019,419,141)
{
Caption="ip"
Type=3
link(_Data,9752501:Part1,[])
}
Add(LineBreakEx,15287335,658,321)
{
Caption="port"
Type=2
}
Add(LineBreakEx,5164727,644,305)
{
Caption="ip"
Type=2
}
Add(InfoTip,13689480,259,28)
{
Info=#29:Запрашиваем следующий ip:port|
Width=253
Height=151
}
Add(BlockFind,5366312,691,345)
{
IncludeBlock=1
StartBlock="

"
EndBlock="

"
link(onSearch,6345573:doEvent1,[])
}
Add(FormatStr,4149251,775,352)
{
Mask="%1 (%2)"
link(onFString,6281593:doWork,[])
link(Str1,15237795:getVar,[])
}
Add(LineBreakEx,6281593,818,352)
{
Caption="Result"
}
Add(LineBreakEx,8666620,822,101)
{
Caption="Result"
Type=1
link(OnEvent,15049631:doSafeMode,[])
}
Add(LineBreakEx,9312087,282,84)
{
Caption="get_ip_port"
Type=1
link(OnEvent,6667049:doSafeMode,[])
}
Add(LineBreakEx,15237795,775,327)
{
Caption="ip"
Type=2
}
Add(Hub,6345573,737,345)
{
OutCount=3
link(onEvent1,13561791:doWork,[(763,351)(763,317)])
link(onEvent2,4149251:doString,[])
link(onEvent3,16737024:doWork,[(763,365)(763,391)])
}
Add(LineBreakEx,7307885,91,245)
{
Caption="StartCheck"
Type=1
link(OnEvent,15798467:doEvent1,[])
}
Add(LineBreakEx,12340182,40,101)
{
Caption="StartCheck"
}
Add(LineBreakEx,533048,580,337)
{
Caption="Open"
Type=1
link(OnEvent,13330691:doOpen,[(635,343)(635,351)])
}
Add(LineBreakEx,6694598,580,352)
{
Caption="Close"
Type=1
link(OnEvent,13330691:doClose,[])
}
Add(LineBreakEx,7271617,581,367)
{
Caption="Send"
Type=1
link(OnEvent,13330691:doSend,[(635,373)(635,365)])
}
Add(LineBreakEx,11493035,446,371)
{
Caption="Send"
}
Add(LineBreakEx,16663807,446,341)
{
Caption="Close"
}
Add(LineBreakEx,10870351,446,356)
{
Caption="Open"
}
Add(InfoTip,8078676,525,28)
{
Info=#7:TimeOut|
Width=288
Height=123
}
Add(LineBreakEx,6082736,544,88)
{
Caption="StartTO"
Type=1
link(OnEvent,6708612:doTimer,[])
}
Add(LineBreakEx,15510067,544,104)
{
Caption="StopTO"
Type=1
link(OnEvent,6708612:doStop,[(609,110)(609,101)])
}
Add(FormatStr,7614002,702,61)
{
DataCount=1
Mask="%1 (TimeOut: 3000 ms)"
link(onFString,10169014:doWork,[])
link(Str1,10236095:getVar,[])
}
Add(LineBreakEx,10169014,749,61)
{
Caption="Result"
}
Add(LineBreakEx,10236095,702,36)
{
Caption="ip"
Type=2
}
Add(LineBreakEx,9409585,446,326)
{
Caption="StartTO"
}
Add(LineBreakEx,13561791,775,311)
{
Caption="StopTO"
}
Add(LineBreakEx,16194856,701,95)
{
Caption="StartCheck"
}
Add(Hub,15252091,666,88)
{
link(onEvent1,7614002:doString,[(691,94)(691,67)])
link(onEvent2,16194856:doWork,[])
}
Add(LineBreakEx,16737024,775,385)
{
Caption="StartCheck"
}
Add(Hub,3691273,404,327)
{
OutCount=5
link(onEvent1,3069769:doWork,[(432,333)(432,317)])
link(onEvent2,9409585:doWork,[(432,340)(432,332)])
link(onEvent3,16663807:doWork,[])
link(onEvent4,10870351:doWork,[(432,354)(432,362)])
link(onEvent5,11493035:doWork,[(432,361)(432,377)])
}
Add(Thread,12698561,352,327)
{
Delay=1
FastStop=0
BusyEvent=1
link(onExec,3691273:doEvent1,[])
}
Add(LineBreakEx,3069769,445,311)
{
Caption="StopTO"
}
Add(If_else,10102029,218,320)
{
link(onTrue,9711684:doEvent1,[(263,326)(263,296)])
link(onFalse,12698561:doStart,[])
link(Op1,4258410:getVar,[])
link(Op2,14198906:Value,[])
}
Add(Memory,14198906,225,277)
{
}
Add(LineBreak,7590476,161,31)
{
Caption="get_ip_port"
Type=1
link(Data,9746293:get_ip_port,[])
Primary=[8039361,258,27]
}
Add(LineBreakEx,4258410,218,260)
{
Caption="ip"
Type=2
}
Add(Hub,9711684,276,290)
{
link(onEvent1,15690209:doWork,[(297,296)(297,292)])
link(onEvent2,6687971:doWork,[(297,303)(297,308)])
}
Add(LineBreakEx,15690209,304,286)
{
Caption="End"
}
Add(LineBreakEx,47105,876,135)
{
Caption="End"
Type=1
link(OnEvent,9746293:End,[(929,141)(929,114)])
}
Add(LineBreakEx,12762906,260,334)
{
Caption="StopCheck"
Type=1
link(OnEvent,12698561:doStop,[])
}
Add(LineBreakEx,6687971,304,302)
{
Caption="StopCheck"
}
Add(SafeMode,6667049,372,84)
{
Name="checker_get_ip_port"
link(onSafeMode,9752501:doSplit,[])
}
Add(SafeMode,15049631,884,101)
{
Name="checker_result"
link(onSafeMode,9746293:OnResult,[])
}
Add(VisualStrings,4312742,651,238)
{
Lines=#20:GET /ip.php HTTP/1.0|21:Host: tools.hiasm.com|17:Connection: Close|0:|0:|
Width=151
Height=60
}
Add(Timer,6708612,618,88)
{
Interval=3000
Enable=1
AutoStop=1
link(onTimer,15252091:doEvent1,[])
AddHint(-9,37,39,13,Interval)
}
END_SDK
Add(MainForm,11326563,350,35)
{
Width=431
Height=338
Caption=""
Position=1
}
Add(Button,13777211,447,238)
{
Left=165
Top=265
Width=185
Height=30
Caption="Проверить"
link(onClick,11304990:doFor,[])
}
Add(Edit,12430023,504,194)
{
Left=60
Top=270
Text="5"
}
Add(Label,6950492,350,119)
{
Left=115
Top=275
Width=47
Height=17
Caption="Потоков"
}
Add(For,11304990,497,238)
{
Start=1
End=5
link(onEvent,7652017:##add,[])
link(End,12430023:Text,[])
}
Add(LineBreak,14589092,495,125)
{
Caption="get_ip_port"
Type=1
link(Data,8737633:GetData,[])
Primary=[6487186,62,85]
}
Add(TCP_Server,5234581,350,77)
{
Port=5
}
Add(EventFromData,8737633,495,83)
{
link(onEvent,10645816:doData,[])
}
Add(Timer,6989260,210,35)
{
Interval=100
link(onTimer,3105876:doData,[])
}
Add(FormatStr,13623212,301,35)
{
DataCount=1
Mask="Прокси чекер 1.0; Активных модулей: %1;"
link(onFString,11326563:doCaption,[])
}
Add(LineBreakEx,5700589,557,289)
{
Caption="CountMTCheck"
Type=3
link(_Data,7652017:##count,[])
}
Add(LineBreakEx,14012912,256,8)
{
Caption="CountMTCheck"
Type=2
}
Add(ChangeMon,3105876,256,35)
{
link(onData,13623212:doString,[])
link(Data,14012912:getVar,[])
}
Add(LineBreak,5459329,450,287)
{
Caption="End"
link(Out,16276923:doPush,[])
Primary=[3306489,152,-42]
}
Add(Memo,492515,651,238)
{
Left=60
Top=5
Width=285
Height=255
AddType=1
ScrollBars=3
}
Add(StrList,3673357,623,41)
{
Strings=#16:93.81.240.87:111|15:93.81.240.87:80|15:93.81.240.87:80|16:93.81.240.87:111|16:93.81.240.87:111|15:93.81.240.87:80|15:93.81.240.87:80|16:93.81.240.87:111|16:93.81.240.87:111|15:93.81.240.87:80|15:93.81.240.87:80|16:93.81.240.87:111|16:93.81.240.87:111|15:93.81.240.87:80|15:93.81.240.87:80|16:93.81.240.87:111|16:93.81.240.87:111|15:93.81.240.87:80|15:93.81.240.87:80|16:93.81.240.87:111|16:93.81.240.87:111|15:93.81.240.87:80|15:93.81.240.87:80|16:93.81.240.87:111|16:93.81.240.87:111|15:93.81.240.87:80|15:93.81.240.87:80|16:93.81.240.87:111|16:93.81.240.87:111|15:93.81.240.87:80|15:93.81.240.87:80|16:93.81.240.87:111|16:93.81.240.87:111|15:93.81.240.87:80|15:93.81.240.87:80|16:93.81.240.87:111|16:93.81.240.87:111|15:93.81.240.87:80|0:|
Point(doGetString)
Point(onGetString)
Point(IdxToSelect)
link(onGetString,8737633:doData,[(668,54)(668,148)(483,148)(483,89)])
}
Add(InfoTip,14774,469,14)
{
Info=#27:Список ip:port для проверки|
Width=218
Height=151
}
Add(Hub,6078942,587,83)
{
link(onEvent1,3673357:doGetString,[])
link(onEvent2,3673357:doDelete,[(613,96)(613,61)])
}
Add(DoData,10645816,540,83)
{
Data=Integer(0)
link(onEventData,6078942:doEvent1,[])
}
Add(Stack,16276923,497,287)
{
link(onPop,7652017:##hdelete,[(543,300)(543,251)])
link(Data,7652017:##eventHandle,[(503,279)(570,279)])
}
Add(Timer,9657903,451,305)
{
Interval=30
link(onTimer,16276923:doPop,[(490,311)(490,300)])
}
карма: 1
1
Голосовали:mmmmm
Ответов: 305
Рейтинг: 4
#8: 2012-07-24 19:54:40 ЛС | профиль | цитата
Хорошо работает, спасибо )
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#9: 2012-07-24 19:54:44 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-12 02:01:40
карма: 0

0
Ответов: 1841
Рейтинг: 369
#10: 2012-07-24 19:57:51 ЛС | профиль | цитата
↑↑↑↑↑↑↑↑↑Я был↑↑↑↑↑↑↑↑↑
карма: 1
0
Ответов: 305
Рейтинг: 4
#11: 2012-07-24 20:02:20 ЛС | профиль | цитата
Свыше нужна система балансировки нагрузки.

Она сложно делается?
------------ Дoбавленo в 19.58:
Есть программы и по 200 держат
------------ Дoбавленo в 20.02:
Загрузил почти 3к прокси и 50потоков. Вот: http://forum.d2h.ru/xf/attach/share/33k78.JPG
карма: 0

0
Ответов: 1841
Рейтинг: 369
#12: 2012-07-24 20:38:45 ЛС | профиль | цитата
mmmmm писал(а):
Она сложно делается?

Тут уж всё зависит от Ваших познаний в этой области
mmmmm писал(а):
200

Ну тут тоже можно 200, но очень много будет пропускать, да и отключать нужно визуальные элементы, дабы не тормозили процесс, в общем оптимизировать.
Тут нужно искать "золотую середину" между качеством и скоростью сканирования, анализировать возможную максимальную нагрузку системы, параметры и возможности сети дабы подобрать оптимальное к-во потоков, timeout и тд...
------------ Дoбавленo в 20.38:
mmmmm, это всего лишь пример, там нужно парсер принятых данных переделывать (может проскочить тело или неизвестный ответ большого объёма), запрос нужно заменить на:

GET http://tools.hiasm.com/ip.php HTTP/1.0
Host: tools.hiasm.com
Proxy-Connection: Keep-Alive


В общем, я продемонстрировал многопоточность
карма: 1
0
Ответов: 305
Рейтинг: 4
#13: 2012-07-24 20:40:53 ЛС | профиль | цитата
Ага, спасибо
Сейчас буду разбираться
карма: 0

0
Ответов: 1841
Рейтинг: 369
#14: 2012-07-24 21:11:18 ЛС | профиль | цитата
mmmmm, вот, доработал немного для прокси...
3360 проксей (копии) и 200 активных модулей (и куча пропущенных проксей ) - ~6% загрузка процессора (2 ядра по 2.8 ггц)
multithreads_checker.sha
карма: 1
0
файлы: 1multithreads_checker.sha [79KB] [104]
Ответов: 305
Рейтинг: 4
#15: 2012-07-24 21:17:19 ЛС | профиль | цитата
CriDos, нажал и закидало ошибками
------------ Дoбавленo в 21.17:
100 норм идет
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)