The OpenNET Project / Index page

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



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

Оглавление

Управление проектом Node.js переходит к руки некоммерческой ..., opennews (ok), 12-Фев-15, (0) [смотреть все]

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


8. "многопоточность"  +/
Сообщение от ТотСамыйИз4хemail (?), 13-Фев-15, 00:46 
я посмотрел. Там вроде один "поток" будет целым отдельным процессом.
Ответить | Правка | Наверх | Cообщить модератору

10. "многопоточность"  +1 +/
Сообщение от dchusovitin (ok), 13-Фев-15, 01:39 
Ага, просто порождает дочерние процессы.

Многопоточности в node.js/io.js особо ждать не стоит. Ибо изначально противоречит идеи проекта, один процесс и асинхронный IO.
Хотя есть JXCore (http://jxcore.com/home/), который, как пишут "multithreaded". Сам не пробовал.
Как вариант, многопоточность можно организовать на c/с++, порождает потоки, считает и возвращает конечный результат.

Когда сталкивался с этим, то написал отдельное приложение (не на node.js). И далее через zeromq общение между двумя приложениями.

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

16. "многопоточность"  +/
Сообщение от Аноним (-), 13-Фев-15, 07:44 
какой эпичный набор костылей. А в Go достаточно запускать функции в отдельных горутинах и завести переменную типа "канал" для передачи сообщений.
Ответить | Правка | Наверх | Cообщить модератору

25. "многопоточность"  +2 +/
Сообщение от Andrew Kolchoogin (ok), 13-Фев-15, 10:02 
А на языке Ассемблера можно та-а-а-акое наваять... ;)
Ответить | Правка | Наверх | Cообщить модератору

34. "многопоточность"  +/
Сообщение от анонимус (??), 13-Фев-15, 12:00 
Причем тут язык ассемблера? Во всех вменяемых языках можно использовать потоки, которые не являются отдлельным процессами, прости господи.
Ответить | Правка | Наверх | Cообщить модератору

53. "многопоточность"  +/
Сообщение от Аноним (-), 13-Фев-15, 14:45 
Не во всех. В некоторых особенно известных популярных Thread идет не из коробки, а прикручивается отдельно.
Ответить | Правка | Наверх | Cообщить модератору

20. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 09:25 
> я посмотрел. Там вроде один "поток" будет целым отдельным процессом.

для linux это один хрен
> man pthreds
> Both threading implementations employ the Linux clone(2) system call.  In NPTL, thread synchronization primitives (mutexes, thread joining, and so on) are implemented using the Linux futex(2) system call.

а на офтопик нас рать.

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

29. "многопоточность"  +/
Сообщение от Мяут (ok), 13-Фев-15, 11:26 
Ну во первых в более Unix'овых системах (Solaris (Joyent SmartOS кстати его дальний родственник), FreeBSD) есть легковесные процессы (LWP), и потоки работают именно через них. Во вторых цены fork() и pthread_create() даже в Linux отличаются.
Ответить | Правка | Наверх | Cообщить модератору

31. "многопоточность"  +1 +/
Сообщение от ананим.orig (?), 13-Фев-15, 11:55 
Во-первых — если читать книжки 20-30-летней давности, то это безусловно так.
Во-вторых — в линухе тоже есть легковесные процессы. И они тоже создаются сисколом clone.
В-третьих — с учётом cow и clone в линухе фактически нет разницы (ни по скорости создания, ни по ресурсоёмкости) между созданием процесса и потока. А все реализации (аля pthreads, с++11 threads,..) всего-лишь надстройки над этим.

Поднимать эту тему (по крайней мере в линухе) уже просто моветон (фф и хром не с болды перешли от трэдов к многопроцессности).
По этому вопросу уже можно определять пользователей легаси-ос. Ну или людей с устаревшими знаниями по этому вопросу.

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

35. "многопоточность"  –1 +/
Сообщение от анонимус (??), 13-Фев-15, 12:01 
>[оверквотинг удален]
> Во-вторых — в линухе тоже есть легковесные процессы. И они тоже создаются
> сисколом clone.
> В-третьих — с учётом cow и clone в линухе фактически нет разницы
> (ни по скорости создания, ни по ресурсоёмкости) между созданием процесса и
> потока. А все реализации (аля pthreads, с++11 threads,..) всего-лишь надстройки над
> этим.
> Поднимать эту тему (по крайней мере в линухе) уже просто моветон (фф
> и хром не с болды перешли от трэдов к многопроцессности).
> По этому вопросу уже можно определять пользователей легаси-ос. Ну или людей с
> устаревшими знаниями по этому вопросу.

Угу. Только память у этих процессов будет разная.

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

36. "многопоточность"  –1 +/
Сообщение от анонимус (??), 13-Фев-15, 12:42 
>[оверквотинг удален]
>> сисколом clone.
>> В-третьих — с учётом cow и clone в линухе фактически нет разницы
>> (ни по скорости создания, ни по ресурсоёмкости) между созданием процесса и
>> потока. А все реализации (аля pthreads, с++11 threads,..) всего-лишь надстройки над
>> этим.
>> Поднимать эту тему (по крайней мере в линухе) уже просто моветон (фф
>> и хром не с болды перешли от трэдов к многопроцессности).
>> По этому вопросу уже можно определять пользователей легаси-ос. Ну или людей с
>> устаревшими знаниями по этому вопросу.
> Угу. Только память у этих процессов будет разная.

Ну и насчет clone():

       The  main  use  of clone() is to implement threads: multiple threads of
       control in a program that run concurrently in a shared memory space.

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

39. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 13:38 
и что?
Вариантов потоков больше.
Вот и всё.

В линухе вообще процесс — это частный случай потока.
fork реализован через clone.

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

40. "многопоточность"  +/
Сообщение от анонимус (??), 13-Фев-15, 13:42 
> и что?
> Вариантов потоков больше.
> Вот и всё.
> В линухе вообще процесс — это частный случай потока.
> fork реализован через clone.

Уф. Ещё раз. У процесса своя память. У потока -- нет. Отсюда и различные сценарии использования.

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

45. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 13:54 
Да, это первый курс, первый семестр.
А вот что далее? Какова реализация всего этого? При чём аппаратная.

Короче, ман «страничная память», ман «cow», ман «сlone».
«Своя память» в страничных таблицах (термин такой — страничные таблицы) «превращается» в одни и те же физические ячейки памяти, при этом особенности аппаратной архитектуры таковы, что скопировать страницу порой проще и быстрее, чем один байт.

зыж
вы вообще про шарэд-объекты в курсе? .so? .dll?
Ну вот тоже самое, только на уровне ядра и на аппаратном уровне проца (и памяти) давно уж как реализовано. Некоторые ОС этим активно пользуются.

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

57. "многопоточность"  +/
Сообщение от клоун (?), 13-Фев-15, 15:26 
Есть функции, позволяющие расшарить свою память (shared memory) для других процессов. Есть меж-процессное взаимодействие (IPC), которое позволяет синхронизировать выполнение между несколькими процессами/потоками.
Ответить | Правка | Наверх | Cообщить модератору

60. "многопоточность"  +/
Сообщение от анонимус (??), 13-Фев-15, 16:08 
> Есть функции, позволяющие расшарить свою память (shared memory) для других процессов. Есть
> меж-процессное взаимодействие (IPC), которое позволяет синхронизировать выполнение
> между несколькими процессами/потоками.

Есть. Только зачем мне всё это, если я хочу очередь обрабатывать?

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

61. "многопоточность"  +/
Сообщение от анонимус (??), 13-Фев-15, 16:09 
>> У нас есть процесс. У него есть доступ к своей памяти.
> Ещё раз, для отстающих.
> У процесса (и потока) есть доступ к своей ВИРТУАЛЬНОЙ памяти.
> Своей физической памяти у него нет и не может быть.

А кто тут говорит про физическую память?

> Всё остальное — наслоение одних упрощённых понятий на другие. Ну первый курс,
> первый семестр, чесслово.

Это называется "абстракции". Их придумали, чтобы не писать всё на ASM. Знакомься, чо.

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

66. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 16:28 
> Это называется "абстракции". Их придумали, чтобы не писать всё на ASM. Знакомься, чо.

Это называется троллинг.
Потому как "спорить" ты стал не о каких то "абстракциях", а о реализации в ядре линукса.
Поскольку знаний, умений и навыков не хватило (а также воспитания), то вот, результат.

Алё! Какой asm? clone — это сискол. Это API ядра. Хоть из bash-скриптов вызывай.

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

59. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 16:01 
> Это ты умничаешь без необходимости.
> Процесс объединяет все используемые программой ресурсы, но диспетчеризация задач производится ОС на основании потоков.

Я вполне могу создать 2-а (и более) процесса (не потока. Будут в списке процессов) с адним и тем же адресным пространством.
clone позволяет мне это делать штатно и легально и не зависимо от того что за понятия в ваших мозгах по этому поводу сформировались. ☺

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

63. "многопоточность"  +/
Сообщение от анонимус (??), 13-Фев-15, 16:10 
>> Это ты умничаешь без необходимости.
>> Процесс объединяет все используемые программой ресурсы, но диспетчеризация задач производится ОС на основании потоков.
> Я вполне могу создать 2-а (и более) процесса (не потока. Будут в
> списке процессов) с адним и тем же адресным пространством.
> clone позволяет мне это делать штатно и легально и не зависимо от
> того что за понятия в ваших мозгах по этому поводу сформировались.
> ☺

Это называется терминология. Опять же, знакомься.

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

64. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 16:16 
Это называется «не лезь не в свой разговор».
Вон выше повод для размышлений для тебя оставил, а сюда тебе пока рано.

зыж
> Это называется терминология. Опять же, знакомься.

вот именно.
и эти термины далеко не аксиомы 20-30 летней давности.

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

62. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 16:09 
> но диспетчеризация задач производится ОС на основании потоков.

тоже не верно.
диспетчер манипулирует контекстом выполнения. иногда в литературе называют задача(task).
ни к потоку, ни к процессу не имеет отношения в общем случае.

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

68. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 17:14 
> Процесс и поток - это термины Windows, в Линукс они называются процесс и нить соотв.

Да ладно! Что за чушь.
Термины process и thread есть в обоих ОС. В доках, манах,.. в коментариях исходного кода.
И мелкософт вроде никак не патентовал их перевод на русский.

Следовательно всё что вы сказали — не верно сформированные понятия терминов в процессе вашего обучения.
Ещё проще — суеверия. :D

Зыж
> Рекомендую черпать знания не из литературных источников, а из технической документации.

Очевидно что в отличие от вас я именно так и сделал. Включая и исходный код.
Так что не вам давать мне советы. По крайней мере не по этому вопросу уж точно. :D

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

42. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 13:45 
зыж
> ЗАМЕЧАНИЯ
>       В  Linux,  fork()  реализован  с  помощью  «копирования  страниц  при записи» (copy-on-write, COW), поэтому расходы на вызов состоят из времени и памяти, требуемой на копирование страничных таблиц родителя и создания уникальной структуры, описывающей задачу.
>       Начиная с версии 2.3.3, вместо того, чтобы вызывать системный вызов fork(), обёрточная функция fork() в glibc, как часть реализации нитей NPTL,  вызывает  clone(2)  с флагами,  которые  обеспечивают  поведение  традиционного  системного вызова (вызов fork() эквивалентен вызову clone(2), если значение равно flags SIGCHLD). Обёртка в glibc вызывает все обработчики при ветвлении (fork), которые были зарегистрированы с помощью pthread_atfork(3).

Вывод из $ man fork.
В свою очередь потоки из стандарта C++11 реализованы через pthreads, т.е. всё таже обертка над clone. Ну и тд и тп.

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

38. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 13:36 
> Угу. Только память у этих процессов будет разная.

Ну и что? Память то виртуальная.
Вопрос только в относительной ценности единовременно выделяемых ресурсов. И не факт, что сильно больше, чем у потоков.
Да и то только при записи туда.
При чтении виртуальные адреса ссылаются на те же физические ячейки памяти.
Ман cow.
clone вообще настолько гибкий сискол и там столько вариантов создания потоков/процессов, что и поток может быть со своим адресным пространством (и для данных, стэка,.. и для команд).

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

41. "многопоточность"  +/
Сообщение от анонимус (??), 13-Фев-15, 13:43 
>> Угу. Только память у этих процессов будет разная.
> Ну и что? Память то виртуальная.
> Вопрос только в относительной ценности единовременно выделяемых ресурсов. И не факт, что
> сильно больше, чем у потоков.
> Да и то только при записи туда.
> При чтении виртуальные адреса ссылаются на те же физические ячейки памяти.
> Ман cow.
> clone вообще настолько гибкий сискол и там столько вариантов создания потоков/процессов,
> что и поток может быть со своим адресным пространством (и для
> данных, стэка,.. и для команд).

Причем тут ресурсы? У потоков общая память. В этом весь смысл, упростить работу с общей памятью.

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

52. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 14:44 
Ззззззззыж
> У потоков общая память. В этом весь смысл, упростить работу с общей памятью.

С теоретической точки зрения. При чём 20-летней давности.
А практически это озночает, что у потоков страничные таблицы указывают на одни и теже физические ячейки памяти.
В линухе с процессами тоже самое, но до того момента, пока один из процессов не начнёт писать  в память (очевидно это различного рода переменные).
К тому же вполне возможно при помощи clone (не fork. fork — это частный случай) создать процесс (не поток) с общим адресным пространством.

По поводу "упростить работу". Угу. Потом думай о блокировках, критических секциях, фьютексах, мьютексах сам.
При этом если напортачил, то падает/блокируется не один поток, а все сразу.
Поэтому и важно знать как именно управляет процессами/потоками сама ОС, а не тот минимум, что вынесен в абстрактный уровень различных языков высокого уровня.
А там реально минимум по сравнению с clone.

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

71. "многопоточность"  +/
Сообщение от Мяут (ok), 13-Фев-15, 19:27 
> в линухе

Но я ведь не про линух. А не в линухе как раз использование fork() - моветон ;) И тем более моветон, что основная статья дохода Joyent - это не линух. Хотя они вроде бы lx-зоны вернули.

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

72. "многопоточность"  +/
Сообщение от ананим.orig (?), 13-Фев-15, 20:52 
> Но я ведь не про линух. А не в линухе как раз использование fork() - моветон ;)

это в каких? так или иначе, но почти во всех никс-лайк системах примерно так же (±, но не только glibc использует ос-специфичные особенности внутри реализации С/С++ стандартов).

если вы вантуз имели в виду, то так и скажите. ☺

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

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

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




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

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