Потоки и процессы.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by nerezus, 28 Oct 2007.

  1. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Вырезано из темы.



    Процесс не является тредом, т.к. разная область памяти. Поэтому форк(новый процесс) не является тредом.
     
  2. Ni0x

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

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Две замечательные статьи про процессы и треды в nix и windows системах:
    http://uinc.ru/articles/34/
    http://uinc.ru/articles/38/
    В свое время очень помогли мне.
     
  3. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    ТС: читаешь

    http://en.wikipedia.org/wiki/Light-weight_process
    http://en.wikipedia.org/wiki/Light_Weight_Kernel_Threads

    и просматриваешь http://www.google.ru/search?q=light+weight+process
     
    #3 _Great_, 28 Oct 2007
    Last edited: 28 Oct 2007
  4. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2_Great_ английского не особо знаю, но пусть потоки реализованы как процессы. только так можно говорить про потоки ядра; я так понимаю на уровне ос потоки действительно создаются как процессы, но их таблицы, пространства и тд просто являются одним целым. вот только fork, как читай единственный механизм создания процесса пользовательского уровня, создает заранее именно НЕ зависимые друг от друга процессы. так я к чему клоню - мы не говорим о том чем занимается ядро, мы говорим о том, что одним доступным вызовом fork ты просто так процессы не объединишь - придется использовать как-то разделяемую память (я не про shmmat и тд), что-то делать со всеми дескрипторами и тд и имхо этого достичь средствами посикс ил сисв апи нельзя. а стало быть выжать из fork'а поток не получится. так что пользовательский по крайней мере posix-потоки не имеют ничего общего с fork-вызванными процессами..
     
    #4 ZaCo, 28 Oct 2007
    Last edited: 28 Oct 2007
  5. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    ZaCo, вообще речь изначально была о поддержке потоков в языке PHP. Но как-то плавно nerezus её перевёл в русло "а существуют ли потоки в Unix". Вы хоть одно разумное объяснение приведите - почему форканый процесс не может считаться потоком, и почему все Unix программисты считают его потоком? Нашлись только два человека, которые с пеной у рта доказывают бредовость Unix архитектуры.

    По поводу "потоков" в PHP: http://ru.php.net/manual/ru/ref.pcntl.php. Хоть какие, но это потоки, и не надо тут строить параллели с виндой. Или тут кто-то будет спорить что в POSIX не существует средств для "общения" потоков? В чём сейчас спор?
     
  6. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    обычно под потоком понимается posix-поток, то есть вызванный функцией pthread_create. это и имелось ввиду. итак, posix-поток выполняется в адресном пространстве процесса, который его создал. я склонен считать греата правым в том, что ядерные потоки действительно ничем от процессов не отличаются. причем процесс чье адресное пространство и тп является единым с другим могут считаться двумя потоками, а не раздельными процессами.

    >>Вы хоть одно разумное объяснение приведите - почему форканый процесс не может
    >>считаться потоком, и почему все Unix программисты считают его потоком?

    я все написал в первом сообщении этой темы. и почему ты говоришь сейчас за всех Unix-программистов?

    >>Нашлись только два человека, которые с пеной у рта
    >>доказывают бредовость Unix архитектуры.

    чего?

    --
    под новым процессом же понимается дочерний процесс после вызова fork, потому что только он доступен из приведенного расширения php. про формы rfork никто ничего не говорит хотя бы потому что это не есть стандарт.
     
    #6 ZaCo, 28 Oct 2007
    Last edited: 28 Oct 2007
  7. Dude03

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

    Joined:
    5 Oct 2006
    Messages:
    49
    Likes Received:
    9
    Reputations:
    7
    В различных unix-like ОС реализация такой фигни(абстракции) как поток различная. Поэтому вопросы типо "а существует ли в Unix поток" выглядят немного глупо.

    Применительно к реализации процессов и потоков в linux: Процесс == поток (на уровне ядра их представляет одна и та же структура)

    За все остальные "юнихи" говорить не буду=)

    +1
     
    #7 Dude03, 30 Oct 2007
    Last edited: 30 Oct 2007
    1 person likes this.
  8. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Я надюсь, что nerezus всё таки разобрался в этих понятиях относительно Unix-систем. Просто если сейчас начнётся обсуждение различного рода обёрток для реализации суперфункциональности в плане "потоков" , то тут форума не хватит чтобы каждый высказал своё мнение... :)
     
  9. DWORD

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

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Потоки есть потоки. Каждый поток - это просто отдельный программный код со своим окружением (хотя может так случиться что код будет исполняться в случайном окружении, т.е. в контексте случайного потока, тогда у этого кода вообще нет своего потока). Процессы это абстракция, каждый волен сам придумывать что называть процессом и в каждой ОС сооствественно они реализованы по-своему. Поток может существовать вообще без процесса.
     
    #9 DWORD, 31 Oct 2007
    Last edited: 31 Oct 2007
    1 person likes this.
  10. DWORD

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

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Протеус, истолкуй здесь свою точку зрения. Ты оставил комментарий в моей "репутации". Я не знаю, причем здесь Рихтер, теория и практика многозадачности не есть реализация операционной системы windows, так причем же здесь Рихтер? И что конкретно мне нужно почитать и в какой его книге?
     
  11. da_ff

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

    Joined:
    11 Jul 2006
    Messages:
    118
    Likes Received:
    22
    Reputations:
    26
    от того что код будет добавлен в другой процес нового процесса не появится
    процесс это обьект ядра соответствующего типа и связанная с ним область памяти, при его создании ему в соответствие ставится первичный поток, помоему нет никакой абстракции
     
    #11 da_ff, 3 Nov 2007
    Last edited: 3 Nov 2007
  12. DWORD

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

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Да нет почему, ему еще может все что угодно ставиться в соответствие (и ставится)
     
  13. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Потому что это процесс, а не поток. И в этом процессе есть 1 поток. Почитай Advanced Unix Programming, глава 5.17.1: потоки имеют разные стеки и последовательности комманд, но глобальные данные, ресурсы(файлы и т.д.) общие.
     
    1 person likes this.
  14. Dude03

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

    Joined:
    5 Oct 2006
    Messages:
    49
    Likes Received:
    9
    Reputations:
    7
    так же как и процесс может существовать без потока=).
    В любом случае и поток, и процесс это абстракции.
     
  15. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    В каждом процессе есть как минимум 1 нить ;)
     
  16. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    У них вообще АП общее.

    и что же он интересно будет делать.
    сразу скажу, такой изврат, как EPROCESS с Flags.ProcessExiting==TRUE в Windows мы не рассматриваем.