The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

В WebKit2 планируют кардинально увеличить надежность и избав..., opennews (ok), 09-Апр-10, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


19. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от минона (?), 09-Апр-10, 23:40 
pthread.h - это всего лишь заголовочный файл POSIX-совместимой библиотеки, использующей облегчённые процессы (в том числе и линухе). в любом случае, они оперируют теми же системными вызовами, но на более высоком уровне.
примеры POSIX-совместимых библ - LinuxThread, NTPL, NGPT...
Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

26. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от Ariel (ok), 10-Апр-10, 02:03 
>pthread.h - это всего лишь заголовочный файл POSIX-совместимой библиотеки, использующей облегчённые процессы
>(в том числе и линухе). в любом случае, они оперируют теми
>же системными вызовами, но на более высоком уровне.
>примеры POSIX-совместимых библ - LinuxThread, NTPL, NGPT...

В смысле, что нет разницы между процессом и нитью? Насколько я знаю, каждый процесс имеет по крайней мере одну нить (main thread). Если нитей несколько, то они существуют в одном адресном пространстве и разделяют ресурсы процесса и могут выполняться параллельно; в чём и смысл.
fork() же порождает именно новый процесс со своим адресным пространством, который обычно заменяется с помощью exec(), что является намного более дорогим. Во всяком случае в Darwin pthreads основаны на mach threads

Ответить | Правка | Наверх | Cообщить модератору

29. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от Ariel (ok), 10-Апр-10, 02:35 
Сейчас смотрел исходники fork(), и кроме копирования ресурсов и много чего прочего, происходит создание нити дочернего процесса. Ну это на Mac OS X / Darwin
Ответить | Правка | Наверх | Cообщить модератору

34. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от минона (?), 10-Апр-10, 12:59 
>В смысле, что нет разницы между процессом и нитью?

разница в деталях. не больше и не меньше.
>fork() же порождает именно новый процесс со своим адресным пространством,

я уже писал как работает fork (и как работает clone). не вижу смысла повторятся.
зы:
раньше ядро вообще не предполагало поддержку многопоточности. потоки создавались на пользовательском уровне (например при помощи библиотеки pthread). для ядра же все эти ветви выполнения были одним процессом.
сейчас используются облегчённые процессы. всё остальное - это структуры в пользовательском пространстве, реализованные по стандарту POSIX или нет.
ззы:
прочитайте уже про облегчённые процессы. тогда не будете глупости писать

Ответить | Правка | К родителю #26 | Наверх | Cообщить модератору

37. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от Ariel (??), 10-Апр-10, 16:00 
в Mac OS X нет понятия облегчённого процесса,  киньте ссылку - скажу спасибо;
на низком уровне (mach) есть tasks и threads, и многопоточность была изначально,
Ответить | Правка | Наверх | Cообщить модератору

39. "В WebKit2 планируют кардинально увеличить надежность и избав..."  –1 +/
Сообщение от минона (?), 10-Апр-10, 16:41 
да не собираюсь я вам что-либо кидать! :D
речь шла про винды и линух. и местами про POSIX потоки. ах, вы захотели про мак? ну, хотеть не вредно.
зы:
главное помнить, что потоки - это абстрактные структуры и цпу до них нет дела. в отличие от процессов. ну а если вы точно хотите поговорить о потоках в маке, то внимательно прочитайте вот эту документацию:
>Threads are one of several technologies that make it possible to execute multiple code paths concurrently inside a single application. Although newer technologies such as operation objects and Grand Central Dispatch (GCD) provide a more modern and efficient infrastructure for implementing concurrency, Mac OS X and iPhone OS also provide interfaces for creating and managing threads.

http://developer.apple.com/mac/library/documentation/Cocoa/C...
и далее по тексту. :D

Ответить | Правка | Наверх | Cообщить модератору

41. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от Ariel (??), 10-Апр-10, 17:23 
Cпасибо за ссылку ;-) но я её само собой читал. И где там сказано, что процессы и нити почти неразличимы? Читаем:

The term thread is used to refer to a separate path of execution for code.
The term process is used to refer to a running executable, which can encompass multiple threads.
The term task is used to refer to the abstract concept of work that needs to be performed.

Кроме того, там написано, что создание отдельных процессов намного затратнее, чем нитей в одном процессе.  

Ответить | Правка | Наверх | Cообщить модератору

42. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от минона (?), 10-Апр-10, 19:03 
где написано? в устаревшей документации к признанной ими же устаревшей технологии :D
вы хотели услышать, что в маке потоки устарели? яблочники и сами это не скрывает.
теперь вы наверное захотите услышать, что процесс создания процессов тоже у них претерпел изменения? ну так да. вот только терминология осталась.:D
будете меня и дальше потчевать устаревшими сведениями? увольте.
Ответить | Правка | Наверх | Cообщить модератору

45. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от Ariel (??), 12-Апр-10, 01:55 
Что устарело? Насколько я знаю все multithreading API основаны на much threads, просто Carbon сейчас выводится из употребления, соответственно и Carbon Thread Manager, Multiprocessor Services.

абстрактно:
Нить - это поток исполняемых иструкций
Процесс - это исполняемая программа, состоящая из данных и нитей.

Контейнер и начинка не могут быть одним и тем же, или нет?

Ответить | Правка | Наверх | Cообщить модератору

46. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от минона (?), 12-Апр-10, 11:34 
контейнер, начинка... всё это абстрактные понятия.
спуститесь на уровень ниже и посмотрите, что происходит в реальности - если ядро не поддерживает потоки (т.е. не происходит заполнения соответствующих структур ядра), то при выдаче одним из потоков блокирующего системного вызова ядро вынуждено блокировать весь процесс (со всеми потоками), т.к. ядро банально не знает кто из них это сделал и как это разрулить. (вот она, мистификация потоков - в теории всё класно, а на практике нет)
соответственно для решения этого и ввели облегчённые процессы (это термин ядра), который один в один напоминает поток (всё работает в одном адресном пространстве и т.д.). параллельно с этим что облегченный процесс, что вообще процесс создаются одним системным вызовом clone, а параметры этого вызова ещё и варьируются.
в случае с обычным процессом происходит всё тоже самое, но когда процесс меняет (только в этот период) какие-либо данные (пишет в память), то при записи копируется изменённая страница памяти (COW) и никаких  доп. расходов. это всё вкратце.
библы (такие как posix thread) это знают и уже использует вовсю.
почему эти библы не знают об этом в маке, и почему они там теперь названы устаревшими - ну догадайтесь.:D
Ответить | Правка | Наверх | Cообщить модератору

47. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от Ariel (ok), 12-Апр-10, 17:40 
>[оверквотинг удален]
>и т.д.). параллельно с этим что облегченный процесс, что вообще процесс
>создаются одним системным вызовом clone, а параметры этого вызова ещё и
>варьируются.
>в случае с обычным процессом происходит всё тоже самое, но когда процесс
>меняет (только в этот период) какие-либо данные (пишет в память), то
>при записи копируется изменённая страница памяти (COW) и никаких  доп.
>расходов. это всё вкратце.
>библы (такие как posix thread) это знают и уже использует вовсю.
>почему эти библы не знают об этом в маке, и почему они
>там теперь названы устаревшими - ну догадайтесь.:D

clone() есть лишь в Linux, почему вы меряете по ней? Darwin использует микроядро Mach, которое изначально знало о нитях и, насколько я знаю, и умею читать исходники, эти понятия означают там именно то, что означают.
Спасибо, что пояснили ситуацию с Linux, я понял вашу мысль, но применимо к Mach это разные понятия. Что ничуть не мешает использовать ленивое копирование процессов и прочие прелести. Я конечно могу ошибаться и если что, напишу.

Ответить | Правка | Наверх | Cообщить модератору

48. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от минона (?), 12-Апр-10, 18:27 
да при чём тут clone? (к слову, от mach'а там мягко говоря мало что осталось. собственно кроме message что? гугл как говорится в помощь)
понятия - это только понятия и не более.
в конце концов именно процессор (аппаратная архитектура) определяет возможности, а не наоборот. а возможности его сейчас таковы, что грань между процессами и потоками размылась очень сильно. и новость тому подтверждение. да и где этот гипердтэйдинг? всё больше мультикоре. а ведь там (на мультиядрах) также есть траблы именно с потоками (в классическом смысле). и если в маке облегчённые процессы назовут потоками - то так тому и быть.
Ответить | Правка | Наверх | Cообщить модератору

49. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от минона (?), 12-Апр-10, 18:39 
зы:
просто с clone и облегчёнными процессами (а это уже стандарт в терминологии *никс. и ввели изначально в солярке кстати) и объяснять проще, да и грамотней.
согласитесь, если мак не сможет использовать такой мощный инструмент, как cow/mmap/etc (которые основаны на страничном управлении памятью), то это будет как-то глупо.
собственно они уже натянули поверх своих новых механизмов (согласно той же доке из того же урл) лайер к посикс потоками. так что старые проги достаточно просто перекомпилить.
ззы:
и не путайте создание процесса (execv) и его клонирование (fork/clone). первый действительно более дорогостоящий, хоть и использует тот же форк.
Ответить | Правка | К родителю #48 | Наверх | Cообщить модератору

50. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от Ariel (ok), 12-Апр-10, 22:09 
от mach там много чего, в том числе и потоки - mach thread и оно не куцое, а изменённое и расширенное:

- untyped interprocess communication (IPC)
- remote procedure calls (RPC)
- scheduler support for symmetric multiprocessing (SMP)
- support for real-time services
- virtual memory support
- support for pagers
- modular architecture

процессы называются tasks, потоки - threads, и именно mach их реализует, всё остальное - есть врапперы.

Ответить | Правка | К родителю #49 | Наверх | Cообщить модератору

51. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от Ariel (ok), 12-Апр-10, 22:13 
забыл сказать, что на Mac принято использовать fork() только вместе с exec(), и лучше заменять эту пару на posix_spawn().
Ответить | Правка | К родителю #50 | Наверх | Cообщить модератору

52. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от Ariel (ok), 12-Апр-10, 22:43 
http://developer.apple.com/mac/library/documentation/Darwin/...
Ответить | Правка | К родителю #51 | Наверх | Cообщить модератору

53. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от минона (?), 13-Апр-10, 01:26 
всё это понятно, но я ещё раз пытаюсь сказать, что мы говорим о разных вещах.
есть куча библиотек реализующих многопоточность. в том числе и на smp, и распределённых на кластер, и т.д.
но всё это уровнем выше. и с разной степенью качества и функциональности.
примеры ну ОЧЕНЬ крутых библиотек - openmp, tbb от intel.

я же говорю о базовых вещах. системных вызовах, которые только создают базу для подобных вычислений. и fork/vfork/clone - это НЕ элементы таких библиотек. это системные вызовы (функции ядра. работающие в кольце 0), которые вы можете использовать сами или через посредника, такие как выше (если они умеют всем этим пользоваться в полном объёме).

зы:
ну а перечисленные вами ipc/rpc/(что_там_ещё?) - вообще совсем не в кассу.

Ответить | Правка | К родителю #52 | Наверх | Cообщить модератору

54. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от Ariel (ok), 15-Апр-10, 14:50 
я лишь написал о том, что процессы и потоки реализованы на уровне Mach именно отдельно, как функции, манипулирующие соответствующими структурами, а всё, что выше - есть врапперы: posix threads, NSThread, fork(), etc. Кроме того, мне написали разработчики, что каждая нить в userlevel имеет back-end нить ядра. Иными словами: если вы в Mac создаёте нить, скажем, с помощью класса NSThread или pthread, то микроядро Mach запускает mach thread.

Если ядро BSD работает поверх микроядра Mach, это значит, что системные вызовы BSD написаны с использование системных вызовов Mach. Конечно, можно было реализовать многопоточность на уровне BSD или userlevel, это было бы хорошо для быстрого создания процессов / потоков, но было бы неэффективно управлять ими (вы сами об этом написали выше).

Я просто перечислил то, чем занимается Mach.

Ответить | Правка | К родителю #53 | Наверх | Cообщить модератору

55. "В WebKit2 планируют кардинально увеличить надежность и избав..."  +/
Сообщение от минона (?), 15-Апр-10, 23:55 
ну а я "перечислил" как это легко, непринужденно и эстетично решается (при помощи 1-го системного вызова) в линухе. :D

зы:
>что каждая нить в userlevel имеет back-end нить ядра.

вот-вот.
накладные расходы неизбежны.

Ответить | Правка | К родителю #54 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру