[.NET] вопрос про нити
а fork аналогов в винде не имеет
а fork аналогов в винде не имеетв Win32 - нет
"в винде" - да
ok
правильно говорить потоки, нити в винде другое означаютА что они означают? Я только "thread" знаю - это вроде как нить. А потоки как раз есть совсем другие - "stream"
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
тоже два параллельных процесса получаетсяостальное, извини, фигня...
Это то, что обычно называют co-routines?
основное отличие - у процессов адресное пространство различное, наборы файловых дескрипторов свои и т.д.
у нитей это всё общее
остальное, извини, фигня...Чего фигня-то. Рассказывай тогда как правильно
fork создаёт настоящие процессы, а нити - они и есть нитиПередергиваешь! Читай
man clone
И будем дальше спорить.
Какое отношение clone имеет к обсуждаемому вопросу?
Его имеет смысл использовать, когда у тебя много операций, которые регулярно появляются и должны выполняться параллельно, при этом они непродолжительные, и поэтому общее число одновременно выполняемых операции ограниченно (вроде даже есть ограничение на 25 в текущей реализации)
Ну да, это я стормозил. Мне казалось, что если делать clone, то ребенок с того же места стартует, что и родитель (как в fork а оказывается, clone просто обыкновенный тред стартует.
Вообще fibers очень специфическая вещь и очень редко используется. Из известных примеров знаю только, что SQL Server ими может пользоваться. Причем SQL Server 2005 хостит .NET CLR и может реализовывать Threads через виндовые fibers.
нить (thread) - это часть кода, которые выполняется параллельно, имеющая свой стек - память и окружение у тредов общее
тред из пула - это обычный тред, единственнее отличие - это то, что такой тред всегда создан - соответственно сильно уменьшаются накладные расходы на запуск коротких кусков кода
пул тредов используется для быстрого выполнения небольших кусков кода параллельно.
В том числе, пул тредов использует и сам framework, например, при асинхронных операциях.
Оставить комментарий
Eugenia_2005
чем отличаются нити из пула, просто нити, и то, что делает в юниксе fork?