Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопоточность, язык С и CPU 
:(
    Опции темы
konshyn
Дата 18.12.2014, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Вопросы чисто теоритические. Не знаю, куда смотреть и как копать, а в мозгу отсутствует понимание и картинка не складывается.

Есть ядро операционной системы. Linux:)
Есть машина 2-х процессорная. Как реализовано то, что разные задачи исполняются на разных процессорах - за это отвечает ОС или архитектура процессора? Задачи "прыгают" между процессорами во время выполнения? Как в linux привязать задачу к процессору - и с помощью утилит, и в самом коде через системные вызовы (С/С++)?

Теперь о многопоточности. Есть в linux у нас такое API, как pthread. Здесь я понимаю, что процессы и потоки создаются самим ядром. Т.е. система о них знает, может оптимизировать и т.д. и т.п., то есть у ядра есть все данные.
Но вот в стандарте С11 появилась поддержка многопоточности <thread.h>. Как многопоточность реализовывается компилятором? Что происходит, что куда компилируется, как привязывается к процессорам, как узнает система о том, что в программе несколько потоков? Это все реализовывается для каждой платформы отдельно или компиляторы делают какие-то общие действия для создания?





--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 19.12.2014, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
Как реализовано то, что разные задачи исполняются на разных процессорах - за это отвечает ОС или архитектура процессора?


ОС.

Цитата
Задачи "прыгают" между процессорами во время выполнения?


Да.

Цитата
Как в linux привязать задачу к процессору


man 7 sched
Ну и, ищи schedtool, schedutils.

Цитата
Здесь я понимаю, что процессы и потоки создаются самим ядром. 


Это, в общем, по факту сейчас так, но теоретически необязательно.

Цитата
С11 появилась поддержка многопоточности <thread.h>


<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
PM MAIL   Вверх
konshyn
Дата 19.12.2014, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



А как java или python обеспечивает многопоточность?


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 22.12.2014, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Современная oracle java на линуксе -- вроде использет в чистом виде (1:1) posix threads. Ну, то есть в том, что она использует pthread я нисколько не сомневаюсь -- а вот 1:1 там или m:n -- по-моему 1:1.

А у питона (Ван Роуссмовского) -- GIL, потому мне дажэ не интересно выяснять, что он использует. Скорее -- green threads с вытеснением в интэрпретаторе опкодов питона. То есть это было бы логично. Впрочем, от Гвидо всего можно ждать -- и мне, повторю, неинтерсно в этом разбираться.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.