[.NET] вопрос про нити
только наверно правильно говорить потоки, нити в винде другое означают
а fork аналогов в винде не имеет
а fork аналогов в винде не имеет
а fork аналогов в винде не имеетв Win32 - нет
"в винде" - да
ok
правильно говорить потоки, нити в винде другое означаютА что они означают?
Я только "thread" знаю - это вроде как нить. А потоки как раз есть совсем другие - "stream"To : просто в винде есть threads и fibers, поэтому threads переводят как потоки, чтобы fibers переводить как нити, вроде так
To : с другой стороны про винду в широком смысле (в том числе и 9х) можно сказать, что есть только win32 api
To : с другой стороны про винду в широком смысле (в том числе и 9х) можно сказать, что есть только win32 api
нити из пула, просто нитиНити из пула - это так называемые used threads. Они очень похожи на обычные нити, но OS про них ничего не знает, они полностью вынесены в user space. Ну это если вкратце
. От этого они немного быстрее работают (точнее, быстрее стартуют но у них может не быть полноценного параллелизма. Имея библиотеку работы с тредами, fork выразить у меня что-то не получается, а вот через специфический вариант fork (кажись clone называется) можно выразить старт обычного треда.
эквивалентно
start_thread(run_me); //Не знаю правильного API-ного названия :(
"правильные параметры" должны обозначать "расшарить фсе!" то есть virtual space, file descriptors и т.п.
if(clone(/*сюда правильные параметры*/) == 0)
{ //i'm child
run_me;
exit; //или чего сюда?
}
Не, вообще то все маленько сложнее, надо же для другого треда сделать _свой_ стек, но чтобы он был виден из исходного треда... Да тяжко наверное было posix threads на unix реализовывать
Короче: fork на треды ваще не похож, никаким боком, разве что тоже два параллельных процесса получается.
просто эта терминология пошла после перевода ADVANCED WINDOWS, JEFFRY RICHTER
Про fork только вот это угадал:
тоже два параллельных процесса получаетсяостальное, извини, фигня...
> это так называемые used threads. Они очень похожи на обычные нити, но OS про них ничего не знает, они полностью вынесены в user space.
Это то, что обычно называют co-routines?
Это то, что обычно называют co-routines?
fork создаёт настоящие процессы, а нити - они и есть нити
основное отличие - у процессов адресное пространство различное, наборы файловых дескрипторов свои и т.д.
у нитей это всё общее
основное отличие - у процессов адресное пространство различное, наборы файловых дескрипторов свои и т.д.
у нитей это всё общее
остальное, извини, фигня...Чего фигня-то. Рассказывай тогда как правильно

fork создаёт настоящие процессы, а нити - они и есть нитиПередергиваешь!
Читай man clone
И будем дальше спорить.

Какое отношение clone имеет к обсуждаемому вопросу?
Тредпул возвращает потоки (threads, буду писать треды). И смысл в том, что он старается держать запасные потоки в спящем режиме (это управляется через SetMinThreads). Поэтому, когда ты ставишь на очередь операцию, то она не ждет пока создастся новый тред, а сразу начинается в одном из разбуженный тредов.
Его имеет смысл использовать, когда у тебя много операций, которые регулярно появляются и должны выполняться параллельно, при этом они непродолжительные, и поэтому общее число одновременно выполняемых операции ограниченно (вроде даже есть ограничение на 25 в текущей реализации)
Его имеет смысл использовать, когда у тебя много операций, которые регулярно появляются и должны выполняться параллельно, при этом они непродолжительные, и поэтому общее число одновременно выполняемых операции ограниченно (вроде даже есть ограничение на 25 в текущей реализации)
Ну да, это я стормозил.
Мне казалось, что если делать clone, то ребенок с того же места стартует, что и родитель (как в fork а оказывается, clone просто обыкновенный тред стартует.
Мне казалось, что если делать clone, то ребенок с того же места стартует, что и родитель (как в fork а оказывается, clone просто обыкновенный тред стартует.На сколько я понимаю, в винде работа с fibers реализована исключительно в kernel32.dll, т.е. в user space
Вообще fibers очень специфическая вещь и очень редко используется. Из известных примеров знаю только, что SQL Server ими может пользоваться. Причем SQL Server 2005 хостит .NET CLR и может реализовывать Threads через виндовые fibers.
Вообще fibers очень специфическая вещь и очень редко используется. Из известных примеров знаю только, что SQL Server ими может пользоваться. Причем SQL Server 2005 хостит .NET CLR и может реализовывать Threads через виндовые fibers.
fork - это фактически запуск отдельного процесса, со своим стеком, со своей памятью, со своим окружением и т.д.
нить (thread) - это часть кода, которые выполняется параллельно, имеющая свой стек - память и окружение у тредов общее
тред из пула - это обычный тред, единственнее отличие - это то, что такой тред всегда создан - соответственно сильно уменьшаются накладные расходы на запуск коротких кусков кода
пул тредов используется для быстрого выполнения небольших кусков кода параллельно.
В том числе, пул тредов использует и сам framework, например, при асинхронных операциях.
нить (thread) - это часть кода, которые выполняется параллельно, имеющая свой стек - память и окружение у тредов общее
тред из пула - это обычный тред, единственнее отличие - это то, что такой тред всегда создан - соответственно сильно уменьшаются накладные расходы на запуск коротких кусков кода
пул тредов используется для быстрого выполнения небольших кусков кода параллельно.
В том числе, пул тредов использует и сам framework, например, при асинхронных операциях.
Оставить комментарий
Eugenia_2005
чем отличаются нити из пула, просто нити, и то, что делает в юниксе fork?