![]() |
|
Модераторы: xvr |
![]()
|
|
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Вопросы чисто теоритические. Не знаю, куда смотреть и как копать, а в мозгу отсутствует понимание и картинка не складывается.
Есть ядро операционной системы. Linux:) Есть машина 2-х процессорная. Как реализовано то, что разные задачи исполняются на разных процессорах - за это отвечает ОС или архитектура процессора? Задачи "прыгают" между процессорами во время выполнения? Как в linux привязать задачу к процессору - и с помощью утилит, и в самом коде через системные вызовы (С/С++)? Теперь о многопоточности. Есть в linux у нас такое API, как pthread. Здесь я понимаю, что процессы и потоки создаются самим ядром. Т.е. система о них знает, может оптимизировать и т.д. и т.п., то есть у ядра есть все данные. Но вот в стандарте С11 появилась поддержка многопоточности <thread.h>. Как многопоточность реализовывается компилятором? Что происходит, что куда компилируется, как привязывается к процессорам, как узнает система о том, что в программе несколько потоков? Это все реализовывается для каждой платформы отдельно или компиляторы делают какие-то общие действия для создания? -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| tzirechnoy |
|
||||||||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
ОС.
Да.
man 7 sched Ну и, ищи schedtool, schedutils.
Это, в общем, по факту сейчас так, но теоретически необязательно.
<threads.h>
В gcc -- никак, поскольку gcc не поддержывает threads.h. Сейчас имеется какая-то реализацыя значительной части threads.h поверх pthreads: http://p99.gforge.inria.fr/p99-html/group__threads.html Когда и если Дреппер включит threads.h в glibc -- ну, скорее всего, будет опять что-то поверх pthreads, ну или там будут две реализацыи в одном libpthread.so
Ни шланг ни gcc вообще практически ничего не делают. Там есть какие-то детали вроде thread_local модификатора и _generic, и чего-то ещё, ну вот минимальная поддержка этого как-то присутствует, остальное -- писателям libc. Это сообщение отредактировал(а) tzirechnoy - 19.12.2014, 18:07 |
||||||||||||||
|
|||||||||||||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
А как java или python обеспечивает многопоточность?
-------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Современная oracle java на линуксе -- вроде использет в чистом виде (1:1) posix threads. Ну, то есть в том, что она использует pthread я нисколько не сомневаюсь -- а вот 1:1 там или m:n -- по-моему 1:1.
А у питона (Ван Роуссмовского) -- GIL, потому мне дажэ не интересно выяснять, что он использует. Скорее -- green threads с вытеснением в интэрпретаторе опкодов питона. То есть это было бы логично. Впрочем, от Гвидо всего можно ждать -- и мне, повторю, неинтерсно в этом разбираться. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |