Проблема с потоками

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Chrome~, 21 Jul 2009.

  1. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Подскажите, с чем это связано или все так и должно быть. В общем, я писал несколько программ, которые работают в несколько потоков, которые в свою очередь отправляют HTTP запросы. Отправляют запрос и сразу же обрывают соединение, не дожидаясь ответа. Таймауты между отправкой запросов - 100 мсек. Не понимаю, с чем это связано, но такая программа при 10 потоках на моем компе 3,41 ГГц очень начинает подвисать система. Да и еще при том, что потоки работают с Priority tpLowest. Я все делаю правильно, - потоки освобождают себя из памяти и т.п... Но никак не пойму, почему система начинает глючить. Или так должно быть?
     
  2. K0rINf

    K0rINf Member

    Joined:
    20 Jan 2009
    Messages:
    40
    Likes Received:
    5
    Reputations:
    6
    Напеши все характеристика компа! и исходники выложи
     
  3. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Без исходников трудно предположить в чем проблема.Возможно они одновременно обращаются без синхронизации к каким то данным, то есть соперничают за доступ к ним.Оттудого и такая загрузка камня.
     
  4. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    типичный признак "бескоченого цикла" в котором есть какие-нибудь расчеты например.
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    У меня двухядерный 2,5 ГГц и держит запросто 1000 ожидающих потоков.
    100 рабочий тоже держит и не грузит систему.
    Так что у тебя дело только в реализации.
    Помимо проверки циклов, еще обрати внимание на то как ты считываеш из сокета.
    Если ты читаеш по 1 байту, то это будет давать весомую нагрузку.
     
  6. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Как продолжение размышлений о потоках:
    Пишу программу под .NET... использую местами http запросы + regex ....
    Какое оптимальное количество работающих потоков на .NET приложение? А то где-то вычитал, что оптимально 25*кол-во процессоров
     
    #6 FireFenix, 21 Jul 2009
    Last edited: 22 Jul 2009
  7. МongBa†

    МongBa† Member

    Joined:
    12 May 2009
    Messages:
    66
    Likes Received:
    12
    Reputations:
    0
    Chrome~
    Если работаешь с винсоками - мб забываеш освобождать WSA? (было как-то по невнимательности - через время тупо висла машина)

    А вообще не вижу смысла в закрытии/высвобождении процессов после каждого запроса, почему бы не сделать постоянный процесс в котором постоянно отправляются запросы, закрывается соединение и заново?
     
    #7 МongBa†, 22 Jul 2009
    Last edited: 22 Jul 2009
    1 person likes this.
  8. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    хых))
    некоторые факторы:
    1. мощность процессора
    2. колл-во ядер
    3. ширина канала
    4. оптимальность паттерна
    5. загруженность ОС без твоего приложения

    это навскидку... Как ты собрался считать оптимальное колличество потоков?

    >>оптимально 25*кол-во процессоров
    В чем различие процесса от потока? И вообще что такое процессор?????

    ппц =\
    Вы там че, курите, мурзилку читаете, надписи на заборе? жуть...
    советую еще это взглянуть
     
    #8 W!z@rD, 22 Jul 2009
    Last edited: 22 Jul 2009
    2 people like this.
  9. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Ах нуда, нынче кучу мануалов по оптимизации потоковых приложений =)
    эта такая чтучка в которой много ног и транзисторов ^_^
    это относилось к 25*[кол-во (процессоров || ядер)]

    Естественно предел памяти и системного времени никто отменял!
     
    #9 FireFenix, 22 Jul 2009
    Last edited: 22 Jul 2009
  10. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Какая ОС ? Если XP, то в ней ограничение на максимальное число конектов - 10.
     
  11. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Вообще мы что тут потомственные колдуны и гадалки чтоли? Чтобы думать что там может быть. А быть там может что угодно. мож он там глюканул с запуском потоков и их запускается неограничено пока есть ресурсы у компа. А мож банальное переполнение которое чтото вешает.

    Короче код в студию! или хотябы кусок который запускает потоки и саму функцию поточную
     
  12. geezer.code

    geezer.code Elder - Старейшина

    Joined:
    22 Jan 2007
    Messages:
    552
    Likes Received:
    358
    Reputations:
    90
    имхо поллинг чистой воды. симптомы - налицо.
     
  13. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Спасибо всем кто ответил.
    Да у меня Windows XP, но не может быть, чтобы максимальное число подключений было 10. (Вроде как после установки программы FlashGet произошла модификация подключений и данного ограничения eу меня уже нету)

    Ресурсы освобождаю. Не знаю, в чем проблема, но вот возьмите код одного из моих Request Sender. Я писал его для некоторых своих целей, и мне нужно было, что бы входные данные принимались в hex-кодировке.

    То есть, что бы замутить такой запрос:
    Code:
    GET / HTTP/1.0
    Host: antichat.ru
    
    
    Передавать в программу нужно такие данные:
    Code:
    47 45 54 20 2F 20 48 54 54 50 2F 31 2E 30 0D 0A 48 6F 73 74 3A 20 61 6E 74 69 63 68 61 74 2E 72 75 0D 0A 0D 0A 
    Код простой, я думаю, у вас не возникнет сложностей. Протестируйте у себя на машине и скажите, что я не правильно написал.

    Для работы с инетом программа использует только Winsock.

    Code:
    http://rapidshare.com/files/258782118/Source.rar
    http://depositfiles.com/files/jx63lsxv2
     
    #13 Chrome~, 22 Jul 2009
    Last edited: 22 Jul 2009
  14. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    есть мнение что не надо в каждом потоке вызывать WSAStartup. Причем в количестве count раз
     
    #14 bons, 22 Jul 2009
    Last edited: 22 Jul 2009
  15. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    То есть перед созданием потоков сделать WSAStartup, а в конце программы - WSACleanUp?
     
  16. RumShun

    RumShun Member

    Joined:
    27 Oct 2008
    Messages:
    283
    Likes Received:
    75
    Reputations:
    6
    WSAStartup вызаваешь один раз, в начале рабоды проги, и закрываешь по выходу из нее, этого хватит, почитай статьи slesh, там это есть.
     
    1 person likes this.