Как стать автором
Обновить

Комментарии 20

А зачем хранить примитивы синхронизации на которых нить заснула?
Если я правильно понимаю, то после того как ее пробудили она продолжит выполнение в каком то участке кода, у которого есть информация об этом объекте )например хранится на стеке)
В данном случае видимо речь о том, что нить при многопоточном выполнении «ждет» сигнала на продолжение, шедулер даже не будет ее будить если примитив все еще залочен (имею ввиду не поступил сигнал от другого потока). Зачем будить нить, если она все равно не будет работать, а восстановление стека, регистров и всего остального состояние нити — затратно.
Если я правильно понимаю принцип работы, то сигнал поступает с помощью
queue_chain_t chain; // used by mutex/cond code to chain waiting threads

То есть у каждого объекта синхронизации есть очередь заснувших на нем потоков. Приведенная переменная является элементом этой очереди. Когда объект разблокируется, он будит (посылает сигнал) эту очередь (или сам выбирает следующий поток для побудки), а эти переменные нужны вероятно для других целей.
Совершенно верно.
Только для отладки — отображение, на чём нить заснула.
Есть ли причина, по которой поток раз за разом называется нитью? Если экскурс — общетеоритический, почему не традиционное «поток»? В Windows NT, например, поток и нить — разные сущности.
Причин-то много можно придумать. Слово поток в системном программировании часто используют в смысле stream. Пример, multiple threads accessing a message stream.
Это не создаст путаницы даже при употреблении рядом, потому что понятия относятся к разным областям, stream скорее к IO или IPC.
В Windows NT, например, поток и нить — разные сущности.

Если Вы про Thread и Fiber, то во многих книгах это нить и волокно. А поток и нить все же всегда об одном.
P.S. Тема холиварная, сам лично предпочитаю сленговый «трэд».
Именно про них. Ни разу не видел такого перевода, встречал только thread и fiber как поток и нить соответственно. Перевод fiber как волокно — откровенно неудачный, просто взято словарное понятие, так мог перевести переводчик «в общем», не понимающий сути текста. Слово волокно означает нить именно в физическом смысле, как волокно из которого соткана ткань. Слово нить же имеет и другой смысл, как «нить повествования» и т.д.
Программирование у нас многопоточное же, а не многонитевое, в конце концов.

Словарь по ВТ дает перевод thread как поток (поток выполнения).
Я лишь хотел заметить, что поток и нить никогда не являются разными понятиями в переводах, а если и были прецеденты, то это неправильно. Как уже заметил предыдущий оратор (я), тема холиварная.
P.S. В английском довольно логично, что волокно это часть нити, да и в русском по смыслу ок, если не выдумывать какие-то «нити повествования».
Я лишь хотел заметить, что поток и нить никогда не являются разными понятиями в переводах, а если и были прецеденты, то это неправильно

Как раз напротив. Эти понятия бывают разными по смыслу, и это логично. Иначе придется вставлять некорректное «волокно».

да и в русском по смыслу ок, если не выдумывать какие-то «нити повествования».

Не ок, нет никакого выдумывания. Языки разные, слова разные, логика языков разная. Перевод — не механический процесс. Весь смысл в том, что у нас есть поток или нить выполнения. Волокно — это совсем другой объект, чисто материальный, в отличие от нити (не в смысле нитки). Это неправильно выбранное слово.
Вы можете уловить нить повествования? А волокно повествования?
И да, опять же: «программирование у нас многопоточное, а не многонитевое, в конце концов».
Вы же поняли, о чём речь? Ну и слава богу. Я, право, совсем не люблю споры о терминологии. Смысла нет. Если вы считаете, что другой термин лучше — назовите его в комментариях. Читатели увидят и обрадуются.
Смысл есть. Новояз — зло, вот и все, что я пытаюсь сказать. Особенно для устоявшихся терминов. Можно табуретку называть… не знаю… «арбузом» и не спорить о терминологии. Можно не пользоваться метрической системой и выпускать болты на 6.27мм — ведь болт же, всем это понятно. Унификация — великое дело; унификация терминологии позволяет всем понимать текст однозначно. Термин execution thread (сокращенно thread) переводится как поток (исполнения) уже лет 40.

Не принимайте всерьез, не собираюсь разводить срач; просто очень раздражает неверный перевод и использование некорректных англицизмов. Вроде «дигитальный-цифровой» или «софистицированный-утонченный», «экспертиза-мастерство, опыт и пр», «преемптивный-вытесняющий».
Я этим делом тридцать лет занимаюсь. Вы уверены, что именно моя терминология — новояз? :)

И регулярно общаюсь с (русскоязычными) системщиками во многих конторах в России и за рубежом. Включая людей из МС и Интел. Я ни разу не наблюдал ни у кого ни тени сомнения относительно смысла термина «нить». Я даже не знаю, как его понять-то неоднозначно.

Он Вам просто не нравится. А мне просто не нравится (омонимичный) термин «поток», который куда более io stream, чем thread. И то, что большинство людей называют копир ксероксом не делает этот «термин» более верным.

Это разговор о вкусах. И, ещё раз повторю — в нём был бы хоть какой смысл, если бы термин «нить» был бы хоть на полграна омонимичен.

Забейте. Единственное важное свойство буквенного лейбла, приклеенного к точке в семантическом пространстве — понятность. Если его поняли — всё хорошо.
Я этим делом тридцать лет занимаюсь. Вы уверены, что именно моя терминология — новояз? :)

Устоявшийся термин — поток, многопоточное программирование. Точка.

Включая людей из МС и Интел. Я ни разу не наблюдал ни у кого ни тени сомнения относительно смысла термина «нить». Я даже не знаю, как его понять-то неоднозначно.

Элементарно: вопрос «чем отличается thread от fiber (поток от, например, нити)».

Он Вам просто не нравится

Нет. Мне не нравится использование нестандартной терминологии.

А мне просто не нравится (омонимичный) термин «поток», который куда более io stream, чем thread.

Разговор об омонимичности «потока» не имеет смысла, потому что мы обсуждаем контекст переключения задач.

И то, что большинство людей называют копир ксероксом не делает этот «термин» более верным.

Не надо передергивать: речь не идет о верности, я говорил об устоявшемся термине. Вы же не будете спорить с тем, что «ксерокс» или «ксерокопия» — устоявшиеся термины? Покажите, пожалуйста, какой-нибудь серьезный труд (м.б. монографию), с теоритической составляющей, где использовался бы термин «нить» для execution thread'а. Я уверен, что такие есть, но я таких ни разу не видел, мне интересно.

в нём был бы хоть какой смысл, если бы термин «нить» был бы хоть на полграна омонимичен.

В Windows world нить, иногда волокно, используются для легковесных потоков (кооп.) fiber.

Забейте. Единственное важное свойство буквенного лейбла, приклеенного к точке в семантическом пространстве — понятность. Если его поняли — всё хорошо.

Так вот не было ее, понятности. Право слово, я впервые увидел «нить» вместо «потока» в ваших статьях (замечательных, тут вбез вопросов). Отсюда и родился вопрос. Возможно, это моя неосведомленность, связанная с преимущественным использованием англоязычных источников.

Заметьте, что тред начался с вопроса «есть ли причина». Вам стоило просто сказать «мне так нравится» и все. Я спросил на тот случай, если в ваших статьях термин «поток» по каким-то причинам однозначно зарезервирован за чем-то другим и это может вызвать путаницу при совместном употреблении. Однако это вылилось в утомительный излишний холивор.
ок. мне так нравится. :)
давайте тратить байты на обсуждение сути, а не фантика.
Конечно. Поймите — мне неинтересн спор ради спора. Вы написали замечательные статьи.
Просто ради эксперимента — представьте себя новичком, зайдите в поиск хабра и наберите «вытесняющий». Ну, ищет молодой человек хорошие статьи про вытесняющую многозадачность. И о чудо — вашей статьи там нет! Если же он наберет «преемптивный», то получит 5 статей: 4 ваших и еще 1.
Поиск по «нить» и «поток» вызовет опять раздрай: половина результатов для пассажей вида «какой-нить», «поток» дает больше результатов «в масть», хоть и разбавлен потоками данных и пр.
Сама двойственность уже тут обсуждалась, тут в комментариях, например: https://habrahabr.ru/post/40275/;

Обидно, что информационное поле расползается. Для вас важна статья, как таковая, и обсуждение ваших идей. Я смотрю с т.з. доступности информации. Это не претензия, просто мысли вслух, закончим на этом.
А в чём ненормальность такого программирования?
На некоторых простых микроконтроллерах вытесняющую многозадачность по другому и не реализовать (доводилось такое делать для 80186).
Да её и нигде по другому не реализовать, насколько я знаю. :) Наверное, я неверно понимаю «ненормальное» — этим занимаются единицы людей на планете, наверное, поэтому я не считаю его особенно нормальным. :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории