Ponieważ C# obsługuje wątkowanie, czy istnieje sposób implementacji koncepcji fork w języku C#?Koncepcja widelec w C#
góry dzięki ....
Ponieważ C# obsługuje wątkowanie, czy istnieje sposób implementacji koncepcji fork w języku C#?Koncepcja widelec w C#
góry dzięki ....
To jest bardziej kwestia .NET/CLR niż C#. Zasadniczo jest to kwestia podstawowego systemu operacyjnego. Okna nie obsługują podobnej semantyki tworzenia nowych procesów. Ponadto, fork()
nie ma nic wspólnego z obsługą wielowątkowości.
Semantyka fork()
polega na powielaniu zawartości przestrzeni adresowej oryginalnego procesu. Moim zdaniem jest to przestarzałe podejście do tworzenia procesów i prawie nie ma miejsca w świecie Windows, ponieważ wiąże się to z wieloma problemami związanymi z bezpieczeństwem i architekturą systemu operacyjnego.
Z punktu widzenia .NET, podstawowym problemem z fork()
byłoby podejście do powielania i/lub dzielenia zasobów niezarządzanych (uchwyty plików, obiekty synchronizacji, uchwyty okienne (!) Itp.) Pomiędzy starszymi a nowy proces. Myślę, że nie ma poważnego powodu, aby wprowadzić taką koncepcję do .NET lub do bazowego systemu operacyjnego Windows.
W celu dalszej dyskusji zobacz link saurabha.
Jednym z poważnych powodów, dla których mogę myśleć, jest obsługa zakleszczeń (rozwidlanie nitek). To zaawansowany pomysł. Ale pchanie i popychanie stanów nici (rozwidlanie i zasypianie nowego wątku) wraz z wersją blokowanych obiektów może pozwolić ci na ponowne pojawienie się, zanim pojawią się zakleszczenia. (Uwaga: zakleszczenia zapobiegają uszkodzeniu danych ... możesz pozwolić im oboje odejść, ale dane nie będą już blokowane wyłącznie - nawet jeśli działa tylko jeden wątek na raz). Daje nam to niezakłócone obiekty atomowe (nawet zakleszczenie baz danych). To jeden poważny powód. – TamusJRoyce
Należy zauważyć, że 'fork' nie dostarczałby żadnych pożądanych efektów na .NET. 'fork' nie działa dobrze w aplikacjach wielowątkowych, powoduje zakończenie wszystkich innych wątków. Aplikacja .NET jest z definicji wielowątkowa, ponieważ działa przynajmniej wątek GC. – Sebazzz
Jak w rozwidleniu polecenia unix? W takim przypadku nie. –