понятия stream и thread ортогональны, поэтому меня (и моих коллег) совершенно не смущает то, что и то и другое мы называем «поток», из контекста всегда понятно, что имеется ввиду
ну значит вы просто из «более нового» поколения программистов, на моей памяти понятие thread'а как потока начало появляться где-то в конце 90-х только. ну и для статистики, у меня также большинство знакомых пользуется старой привычкой и под «нитью» понимают именно «thread».
Все эти слова имею разный смысл, просто их переводят неправильно
Line — линия, черта, граница
String — струна, тетива, нечто натянутое
Row — ряд, шеренга
смотря что ты имеешь ввиду:
Строка — чёткая последовательность символов String (ассоциация бусы натянутые на нитку)
Строка — в смысле линия текста Line
Но уж никак не Row.
Лично я этим пользоваться не буду. У меня в самом начале этой ветки обсуждения была шутка, но раз уж Вы серьёзно разговариваете — оба варианта плохи.
«Ряд экрана» никогда и никто не говорил, и не писал — не существует такой терминологии. Но это полбеды. В конечном итоге всегда можно ввести новый термин. Хуже, что новое значение добавляется к уже существующему слову «ряд», которое не менее, чем «строка» используется в ИТ.
Как только в английском встретися «you can see Taylor's series at 5th row» Вам опять придётся придумывать, как увязать 5-й ряд экрана с рядом Тейлора.
Я не мир, мне многообразие мнений не нужно, потому интересуют только продуманные мнения, а не придуманные тут же по хожу обсуждения.
Решение в данном случае заключается не в том, чтобы фиксировать перевод терминов (тем более, что он уже зафиксирован), а в том, чтобы вдумчиво переписывать такие «сложные» места своим языком.
Автор статьи в данном случае всё сделал правильно — в первом же абзаце написал что под чем понимается, чтобы не было путаницы.
согласен, но все-равно однозначного устоявшегося перевода нет
плюс, эти понятия могут сильно менять свое значение в зависимости от того, на каком уровне абстракции мы находимся
для этого я, кажется, вполне четко изложил, что подразумевается под нитью в данном конкретном тексте
Ага, или «тред» — по-моему, лучше для избежания непонимания и не придумаешь. Все равно слова нерусские и изначально ни «нить», ни «поток» не имели этих компутерных значений.
fiber(нитка) — user-mode, thread(тред, поток) — ядерные. По-дефолту поток==нить==thread, чисто технический сленг.
Все вышесказанное относится к winapi.
Как забавно, автор писал статью о параллельном программирвании, а публика слышит только «нить» вместо «поток». Ну, на комментарии посмотрите.
Самое забавное — я тоже.
Я думаю, чтобы переть против устоявшейся терминологии нужно предложить куда больше, чем экономию пары байтов =).
Как бы ни утверждал автор топика, устоявшееся название для того, о чем он рассказывает — поток. Т.е. Thread = поток, точно так же, как Multithreading = мультипоточность или многопоточность.
Честно говоря, ни разу не встречал определения «нить» или «многониточность».
единую область памяти — непонятно что имеется в виду
нити и потоки работают в едином адресном пространстве. разница в том что один поток может выполнять несколько нитей(но не параллельно). переключение между нитями легковесное, т.к. смены контекста не происходит.
A fiber is a unit of execution that must be manually scheduled by the application. Fibers run in the context of the threads that schedule them. Each thread can schedule multiple fibers.
Можно я скажу?
В научных беседах, когда собеседники видят, что проблема в терминологии, они договариваются от ней в рамках данного разговора. Иногда доходит до курьезов, когда обозначают отвлеченными словами. Предлагаю назвать thread — ежом, stream — ужом, fiber — колючей проволокой, сказать какое определение за что отвечает и не мучится. ;)
З.Ы. Автор, кстати, во избежание разночтений предварительно дал то определение, которым пользуется, и что за ним стоит. Будьте терпимы и разжигайте холивар на пустом месте.
Thread — это цепочка выполнения команд процесса (маршрут). Process — множество команд, с основной цепочкой их выполнения (магистраль?). Процессор последовательно выполняет команды по каждой из цепочек процесса. Допустим, по одной команде из каждой цепочки за раз. Цепочки выполнения команд могут пересекаться. Если команды в этих пересечениях оперируют одними и теми же данными — нам нужно выполнять синхронизацию потоков, приостановить выполнение команд в одной из цепочек, дать выполниться командам в другой. Если данные разные для каждой цепочки — то не паримся, процессор просто выполнит несколько раз (по количеству пересёкшихся цепочек) одну и ту же команду с разными данными.
Вот такая картинка в голове позволяет мне писать многопоточный код. Параллельного кода ещё не писал, но там и картинка проще этой.
Это значит, что один и тот же код может выполняться в нескольких потоках «одновременно». Про процессор — я намеренно всё упростил, чтобы картинка была понятнее.
Так итог какой у поста, треды на разных ядрах выполняются?
насколько я знаю, те треды и процессы которые мы используем в .net это виртуальные процессы порожденные фреймворком, который сам решает мепить данный тред на новый (настоящий тред ОС) или повесить на существующий. А уже ОС дальше решает повесить данный тред на другое ядро (процессор) или нет. Поэтому _мне кажется_ что иногда тред будет выполнятся на том же ядре а иногда на другом в зависимости от загруженности системы.
По-дефолту, ОС сама решает на какое ядро кинуть выполняемый поток, но разработчик может прямо указать какую задачу на какое ядро/процессор он хочет «повесить».
Многоядрёное программирование в .Net и нити.