ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Многопоточность и Winsock
  #1  
Старый 14.05.2010, 12:52
denjf
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
Провел на форуме:
592199

Репутация: 21
По умолчанию Многопоточность и Winsock

Делаю так, это часть кода.

Цитата:
-----Шапка------

procedure Tpotok.Execute;
var
WSAData1: TWSAData;
SockAddr1:TSockAddr;
Socket1: TSocket;
Buffer1,html,html2,buf:string;
Buffer2:array[1..1024] of char;
d:integer;
begin

if WSAStartup(MAKEWORD(2,2), WSAData1)<>0 then begin
------------------------

end;
SockAddr1.sin_family:=AF_INET;
SockAddr1.sin_addr.S_addr:=inet_addr(PChar('----------'));
SockAddr1.sin_port:=htons(80);
Socket1:=Socket(AF_INET,SOCK_STREAM,0);
if Socket1=INVALID_SOCKET then begin
----------------------------------------------
end;
if Connect(Socket1,SockAddr1,SizeOf(SockAddr1))<>0 then begin
--------------------------------------

end;
Buffer1:='GET --------------------';

htmlcod:='';
html2cod:='';
repeat
FillChar(Buffer2,SizeOf(Buffer2),0);
d:=recv(Socket1,Buffer2,SizeOf(Buffer2),0);
htmlcod:='';
for i:=1 to d do htmlcod:=htmlcod+Buffer2[i];
html2cod:=html2cod+htmlcod;
until d<=0;
responseres.Text:=utf8toansi(html2cod);
end;
Запуская как положенно потоки.

НО такое чувство что потоки работают по очереди, а не одновременно.

Может я че не так сделал??
Тоже самое делал через инди, видно что потоки работают вместе.

Или я уже гоню и мозг мой взорвался при изучение winsock =))
 

  #2  
Старый 14.05.2010, 15:38
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Юзай WinAPI потоки и не парься.
CreateThread, ExitThread, TerminateThread, ResumeThread, SuspendThread
основные функций которые нужны будут при работе с потоками. Ну и для нормальности еще про CloseHandle не забывай
 

  #3  
Старый 14.05.2010, 16:07
BrainDeaD
Постоянный
Регистрация: 09.06.2005
Сообщений: 531
Провел на форуме:
3516666

Репутация: 439


По умолчанию

параллельная работа потоков на одном ядре - иллюзия
 

  #4  
Старый 14.05.2010, 16:55
denjf
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
Провел на форуме:
592199

Репутация: 21
По умолчанию

slesh - спасибо буду разбираться, вот бы еще где нибуть пример бы нарыть самый простой.

Цитата:
параллельная работа потоков на одном ядре - иллюзия
я читал где то что на самом деле на одно ядро один реальный поток.
и что илюзионо кажется что в винде может работать несколько програм одновременно, но на самом деле это не так. "Может я не прав".

но тут дело немного не в этом...
 

  #5  
Старый 14.05.2010, 17:13
Chrome~
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме:
1747641

Репутация: 175
Отправить сообщение для Chrome~ с помощью ICQ
По умолчанию

Все таки советую проверить работу этой программы, и такую же программу, но которая использует Indy с помощью сниффера. По идеи должно работать все приблизительно одинаково, твой вариант должен быть даже быстрее. Но также учитывай, что все зависит от того, насколько сильно загружена твоя сеть, сервак и т. д. Иногда сможешь получить страницу за несколько десятых секунды, а иногда приходится ждать намного дольше.
 

  #6  
Старый 14.05.2010, 17:43
GhostOnline
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме:
828081

Репутация: 84
По умолчанию

Покажи код в котором ты запускаешь потоки.
Что TThread что CreateThread - какая разница, если ТС не понимает самой сути работы потоков.

Цитата:
параллельная работа потоков на одном ядре - иллюзия
Да, дядька Билл нас водит за нос

Последний раз редактировалось GhostOnline; 14.05.2010 в 17:45..
 

  #7  
Старый 14.05.2010, 17:56
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

параллельная работа потоков на одном ядре - иллюзия - это да.
Но этот термин больше подходит к описанию превдо параллельная.

Для вычислений реально смысла нет. Но есть смыл для блокируемых операций. А в блокируемым операциям зачастую относятся паузы, всякого рода синхронизация объектов, ожидание объектов. А так как стандартные сокеты повсеместно юзают блокируемые операции, то тут как раз и появляется смысл в потоках.
Хотя вообще сама MS советую юзать 2 потока на ядро. (в случае пула потоков итд итп)
Это всё связано с тем, что если вдруг обработка инфы на одном из них заглохнет (мож ошибка мож еще чтото), то система продолжить функционирование.

А вот если для расчетов юзать потоки, то тут наоборот будет замедление. потому что
процессорного премени они суммарно получат одинаково почти, но будет задержка при переключении контекстов и планировании самих потоков.

Но в его случае (блокируемые сокеты) тут как раз и есть выход - потоки.
 

  #8  
Старый 14.05.2010, 18:33
denjf
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
Провел на форуме:
592199

Репутация: 21
По умолчанию

Цитата:
Что TThread что CreateThread - какая разница, если ТС не понимает самой сути работы потоков.
Может и не понимаю. Кстати проверил на 100 потоках работает норм. Меня глючило просто)))

Chrome~ По части Indy(idhttp), на винсок получение странтцы быстрее. и еще пробывал через прокси один и тот же, сравнивал, тоже намного быстрее
winsock.

Только вот так я и не догнал почему на Delphi 7 все работает а на Delphi 2010, тоже самое работать не хочет.
 

  #9  
Старый 14.05.2010, 21:33
GhostOnline
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме:
828081

Репутация: 84
По умолчанию

Цитата:
Chrome~ По части Indy(idhttp), на винсок получение странтцы быстрее. и еще пробывал через прокси один и тот же, сравнивал, тоже намного быстрее
winsock.
Если ты до сих пор не в курсе - открою страшную правду: инди работает на этих же сокетах. А ты практически заявил что ты такой мастер что на твоих сокетах получение страницы происходит быстрее чем на сокетах в инди. Ну да, конечно, куда там разработчику инди до тебя. Про прокси вообще даже говорить нечего - щас он живой, через минуту дохлый.
В общем сам в эти сказки верь, а новичков путать не надо.

ПС и этот чувак продавал софт на ачате - бррр, жуть

Последний раз редактировалось GhostOnline; 14.05.2010 в 21:35..
 

  #10  
Старый 14.05.2010, 21:44
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

не, ну с чегоже вы взяли что инди работают также как и обычные сокете по скорости?
Если так рассуждать то и дельфовые проги работают с одинаковой скоростью что и сишные, потому что юзают все теже апи функции.

Инди медленней сокетов за счет огромного числа проверок (просто ппц сколько их там). К тамуже он юзает VCL (а VCL он сам по себе вносит ощутимый вклад во всё это) по этому суммарно скорость работы на инди намного меньше чем напрямую на сокетах, но всёже эта скорость напорядки выше чем скорость работы с сетью.
По этому заметить разницу очень тяжело за исключеним случаев, когда это серверное сетевое приложение.
Посмотрелбы я на тебя как ты на инди бы написал сервер который проводил бы передачу данных между 25 тысячами клиентов. Причем проводил бы всё это на очень высокой скорости. инди бы загнулибы всю систему тебе. захавалибы памяти много и вообще хз получилосьбы или нет. А на сокетах такое сделать - практически не проблема (при правильном проектировании системы).
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ