Size: a a a

2021 October 13

ИT

Иван 🐢 The Developer... in SPb Python
ядро занимает поток, а не процесс
источник

ИT

Иван 🐢 The Developer... in SPb Python
больше потоков - больше ядер занятых (хотя это тоже можно регулировать)
источник

СВ

Свободный Веткин... in SPb Python
Но если я запущу этот код с 2 процессами то они нагрузят 2 ядра, а если я запущу 2 потока то они нагрузят все ядра
источник

A

Andrey in SPb Python
Два потока как и два процесса должны нагрузить два ядра
источник

A

Andrey in SPb Python
На этом скриншоте пять потоков, ОС их распределила по всем доступным ядрам
источник

ИT

Иван 🐢 The Developer... in SPb Python
ты смотри на распределение потоков по ядрам, а не на нагрузку, которой у тебя нет, ты их грузишь абьюзом GIL :)
источник

СВ

Свободный Веткин... in SPb Python
Да так и есть. Но это тоже вопрос, почему два потока задействуют два ядра, ведь они принадлежат одному main процессу, и должны нагружать одно ядро.
источник

ИT

Иван 🐢 The Developer... in SPb Python
а с чего ты
источник

ИT

Иван 🐢 The Developer... in SPb Python
это взял? что должны одно ядро юзать?
источник

СВ

Свободный Веткин... in SPb Python
Переслано от Свободный Веткин...
Книга "Секреты Python 59 рекомендаций по написанию эффективного кода"
источник

ИT

Иван 🐢 The Developer... in SPb Python
так тут речь вообще не об этом
источник

СВ

Свободный Веткин... in SPb Python
Тут говориться что один процесс может задействовать одно ядро, а не два или три. Но почему то когда используются потоки, один процесс может задействовать и два и три ядра
источник

A

Andrey in SPb Python
Тут не говорится, что процесс не может задействовать два ядра
источник

СВ

Свободный Веткин... in SPb Python
Попробуйте сами, у меня получается, если тот же самый код запускать через процессы, то они будут нагружать только по одному ядру, на каждый процесс. Не какой процесс не берет себе по два или три реальных ядра.
from multiprocessing import Process


def test_sleep():
 while True:
   pass


if __name__ == '__main__':
 count_tgread = 2

 list_thread = []
 for x in range(count_tgread):
   test_thread1 = Process(target=test_sleep,daemon=True)
   list_thread.append(test_thread1)
   test_thread1.start()

 for th in list_thread:
   th.join()
источник

A

Andrey in SPb Python
Так это потому, что в каждом процессе изначально всего один поток
источник

ИT

Иван 🐢 The Developer... in SPb Python
там говорится о том, что при мультипроцессинге ты запускаешь дополнительные питон интерпретаторы, внутри по одному потоку, т.е. запускаешь два потока, которые занимают 2 ядра
источник

ИT

Иван 🐢 The Developer... in SPb Python
при трединге ты запускаешь 5 потоков, которые занимают все твои 4 ядра
источник

ИT

Иван 🐢 The Developer... in SPb Python
5 потоков шарят память между собой, 2 потока, принадлежащих разным процессам, не шарят
источник

DA

Dmitry Alimov in SPb Python
вот это очень важная для понимания вещь.
CPU исполняет код из тредов.

вторая вещь что когда запукается процесс в нём есть как минимум один главный тред.

ну и конечно на распределение по ядрам CPU влияет шедулер ОС. ему можно подсказать на каком ядре запускать тред (через аффинити), если не подсказывать то он будет распределять и балансировать треды по загрузке ядер CPU.
источник

ИT

Иван 🐢 The Developer... in SPb Python
у кого pid меньше, тот и главнее? :)
источник