Vlad
Vlad
Anton
Anton
В винде кстати потоки - намного легковеснее
Anton
это не полноценные проццесы
Anton
В расте были фиберы, жаль их выпилили
Anton
слелали бы опциональными
big
а про macOS есть инфа? как там все устроено?
Anton
к сожалению я не вкурсе, думаю похоже на линух
Vlad
Vlad
Там же микроядро
Anton
с другой стороны там потомок match
big
Vlad
А POSIX вроде в юзерспейсе вообще запилен...
Anton
микро сервис микросервисом погоняет
Евгений
Я слышал, что майкрософт заявляет, что виндовые потоки легковесные, но так и не знаю в чём именно
Alex
а что, в линуксе потоки - тяжелые?
big
у них есть тема GCD для мультипоточности. Говорят что ее нельзя портировать нормально, т.к. у форточек и линухов не хватит возможностей
big
LexsZero
тяжелые = скедулятся через контекст-свитчи и скедулер в ring0
Anton
Anton
кратко
Vladimir
Vlad
Хотя по другим слухам в винде вообще максимально неадекватный шедулинг
Vlad
Короче винда полна слухов, нихрена непонятно. Все как обычно
Vladimir
Vladimir
Мы говорим про нативный потоки, они и должны а кернелспейсе жить
Anton
Сори, чет туплю
Anton
Anton
папить по ядрам
Anton
мапить*
Vladimir
Как я понимаю "тяжелость" в исходном контексте определяется ресурсами на создание потока, то что они шедулятся ядром берём за основу. И тут вот вопрос, почему потоки тяжелые по сравнению с виндой?
Vladimir
Ну если там просто сравнивают отношение создание процесса/ создание потока. То мб
Anton
Ща поищу
Anton
В принципе ничего нового - виндовые потоки более легкие потому что более тупые =)
Anton
А может дело вовсе в другом - Такие системы, как Windows NT и OS/2, как говорят, имеют «дешёвые» потоки выполнения и «дорогие» процессы. В других операционных системах разница между потоками выполнения и процессами не так велика, за исключением расходов на переключение адресного пространства, которое подразумевает использование буфера ассоциативной трансляции.
Anton
https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F
Anton
Может в винде просто процессы настолько тяжелые - что потоки легкие =)
Anton
Средства синхронихации в Win32 есть двух типов: реализованные на уровне пользователя, и на уровне ядра. Первые — это критические секции (critical section), к второму набору относят мьютексы (mutex), события (event) и семафоры (semaphore).
Критические секции — легковесный механизм синхронизации, который работает на уровне пользовательского процесса и не использует тяжелых системных вызовов. Он основан на механизме взаимных блокировок или спин локов (spin lock). Поток, который желает обезопасить определенные данные от race conditions вызывает функцию EnterCliticalSection/TryEnterCriticalSection. Если критическая секция свободна — поток занимает ее, если же нет — поток блокируется (т.е. не выполняется и не отъедает процессорное время) до тех пор, пока секция не будет освобождена другим потоком с помощью вызова функции LeaveCriticalSection. Данные функции — атомарные, т.е. вы можете не переживать за целостность ваших данных ;)
Anton
https://habrahabr.ru/post/40227/
Anton
Ну нинай, единственный сомнительный плюс виндовых потоков - синк на уровне юзер спейс
Anton
Итак. Модель 1:1 — самая простая модель. Согласно ее принципам, любой поток созданный в любом процессе управляется напрямую планировщиком ядра ОС. Т.е. имеем отображении 1 к 1 потока пользовательского процесса на поток ядра. Такая модель реализована в Linux начиная с ядра 2.6, а также Windows.
LexsZero
критикал секшнс - это futex?
Anton
Anton
инфа из 2008го =)
Евгений
Ну всё понятно, легковесность -- маркетинговый ход
Anton
Ну исходники закрыты, можно сказать что там ИИ задачи переключает =)
Евгений
Typical for proprietary world
Vladimir
Anton
ВоошпЕ эта тема была популярны в 2000х думаю, проблема там и осталась, сколько ядер с тех пор утекло
分解物質
Vlad
Эти 2 последних сообщений не противоречат друг другу?
分解物質
нет
Vlad
Ну ладно
分解物質
Vlad
До какого-то момента pid был разный у потоков одного *процесса*. Потом прикостылили этот tid и сделали чтоб pid одинаковый был. Реализация от этого сильно не изменилась
Anton
Там много костылей =)
Anton
Непомню точно, попмоему gid процеса это pid * -1
分解物質
分解物質
начиная с linux 2.4.0
分解物質
уже 16 лет как
Vlad
А о том, что поток и процесс с точки зрения ядра одо и то же
分解物質
Vlad
分解物質
может шедулер из этого какие-то выводы делает, хз
big
ведь я так понимаю что шедулер должен знать что выгоднее переключать потоки (процессы) из одного процесса (группы потоков)
分解物質
分解物質
execve() тушит не только взывающий поток но и весь thread group
分解物質
сискол tkill() -- как kill() но доставляет сигнал конкретному потоку
Makc