@RomanSamets
C++, C, assembler, CS

Правильно ли Я понимаю?

Например, у нас есть процессор(2 ядра и 4 потока), ОС, процесс А(3 потока) и процесс В(2 потока). Одновременно может работать 4 потока. То есть ОС будет постоянно переключатса между процессами и каждий процесс будет использовать
не все потоки процессора? Есть ли лимит на количество потоков у процесса?
  • Вопрос задан
  • 220 просмотров
Решения вопроса 3
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
ОС будет каждый квант времени запускать 4 каких-то потока. На каких ядрах и какие именно четыре из трех потоков A и двух B или бесчисленного множества системных потоков - решает системный планировщик задач.

Представьте, что в системе стоит процессор с одним ядром и потоком. Тогда система может запускать потоки так - 10мкс A1, 10мкс B1, 10мкс A2, 10мкс B2, 10мкс A3, 10мкс A1, 10мкс B1 ...

Для четырех логических ядер может быть, например, так 10мкс {A1,A2,B1,B2}, 10мкс {A1,A3,B1,B2}...
Ответ написан
@AlexSku
Программист по автоматике
Насколько я знаю, нитей (threads) может быть сколько угодно. Обычно их вызывают асинхронно, т.к. ответ может прийти с заметной задержкой. Для эффективного распараллеливания лучше графический процессор.
Ответ написан
hint000
@hint000
у админа три руки
Есть ли лимит на количество потоков у процесса?
https://www.google.com/search?q=process+thread+limit

https://stackoverflow.com/questions/344203/maximum...
Linux doesn't have a separate threads per process limit, just a limit on the total number of processes on the system (threads are essentially just processes with a shared address space on Linux) which you can view like this:
cat /proc/sys/kernel/threads-max

https://superuser.com/questions/1469924/maximum-th...
You'll hit other problems rather than any explicit cap. As explained by Raymond Chen, every thread requires some memory for bookkeeping, notably its stack (where the thread is in its execution of the program). 32-bit processes can only address 4 GB of memory, which will fit about 2,000 threads with the default 1 MB stack allocation per thread or about 12,000 with the smallest possible allocation of 64 KB per thread. 64-bit processes don't have problems with address space, but rather with the actual allocations. My system runs out of memory a little after testlimit64 -t passes 270,000 threads created.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@tormozillo
Добавлю к предыдущим ответам, т.к. имеется 2 ядра, то в дополнение к планировщику ОС ещё будет переключение между 2 потоками на уровне ядер процессора.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы