Концепция вилки в C #

Поскольку C # поддерживает многопоточность, есть ли способ реализовать концепцию вилки в C #?

Заранее спасибо....


person Aditya Singh    schedule 12.10.2010    source источник
comment
Как в командной вилке unix? В таком случае нет.   -  person    schedule 12.10.2010


Ответы (1)


Это больше вопрос .NET / CLR, чем C #. Как правило, это вопрос базовой операционной системы. Windows не поддерживает fork()-подобную семантику порождения новых процессов. Кроме того, fork() не имеет ничего общего с поддержкой многопоточности.

Семантика fork() включает дублирование содержимого адресного пространства исходного процесса. Я считаю, что это устаревший подход к созданию процессов, и он почти не имеет места в мире Windows, потому что он связан с множеством проблем, связанных с безопасностью и архитектурой операционной системы.

С точки зрения .NET, фундаментальной проблемой fork() будет подход к дублированию и / или совместному использованию неуправляемых ресурсов (дескрипторов файлов, объектов синхронизации, дескрипторов окон (!) И т. Д.) Между старым и новым процессом. Я думаю, что нет серьезных причин вводить такую ​​концепцию ни в .NET, ни в основную операционную систему Windows.

Для дальнейшего обсуждения см. ссылку Саураба.

person Ondrej Tucny    schedule 12.10.2010
comment
Одна серьезная причина, о которой я могу думать, - это обработка тупиковых ситуаций (разветвление потоков). Это продвинутая идея. Но нажатие и извлечение состояний потока (разветвление и засыпание нового потока) вместе с управлением версиями блокируемых объектов может позволить вам вернуться в состояние до того, как могут возникнуть взаимоблокировки. (Примечание: взаимоблокировки предотвращают повреждение данных ... вы можете отпустить их обоих, но данные больше не будут блокироваться исключительно - даже если одновременно выполняется только один поток). Это дает нам атомарные объекты, не зависящие от взаимоблокировки (даже тупиковые ситуации с базами данных). Это одна серьезная причина. - person TamusJRoyce; 04.08.2012
comment
Обратите внимание, что fork на самом деле не обеспечит каких-либо желаемых эффектов в .NET. fork плохо работает с многопоточными приложениями, он вызывает завершение всех остальных потоков. Приложение .NET по определению является многопоточным, потому что выполняется хотя бы поток сборщика мусора. - person Sebazzz; 13.09.2017