Влияние производительности Процессов по сравнению с Потоками

with .

Это редко используется, и откровенно говоря, редко полезное... Но при ограниченных обстоятельствах это действительно имеет свое использование.

, Например: литералы объектов довольно удобны для того, чтобы быстро настроить свойства на новый объект. Но что, если необходимо измениться половина из свойств на существующем объекте?

var user = 
{
   fname: 'Rocket', 
   mname: 'Aloysus',
   lname: 'Squirrel', 
   city: 'Fresno', 
   state: 'California'
};

// ...

with (user)
{
   mname = 'J';
   city = 'Frostbite Falls';
   state = 'Minnesota';
}

Alan Storm указывает, что это может быть несколько опасно: если объект, используемый в качестве контекста, не делает , имеют одно из свойств, присваиваемых, это будет разрешено во внешнем объеме, возможно создавая или перезаписывая глобальную переменную. Это особенно опасно, если Вы привыкли писать код для работы с объектами, где свойства с или пустыми значениями по умолчанию оставляют неопределенными:

var user = 
{
   fname: "John",
// mname definition skipped - no middle name
   lname: "Doe"
};

with (user)
{
   mname = "Q"; // creates / modifies global variable "mname"
}

Поэтому это - вероятно, хорошая идея избежать использования with оператор для такого присвоения.

См. также: там законное использование для оператора JavaScript’s “with”?

5
задан Will 29 November 2009 в 10:27
поделиться

4 ответа

Идея о том, что процессы создаются медленно, устарела и была гораздо более верной в прошлое. Команда Google Chrome где-то написала небольшой абзац о том, что это больше не оказывает такого большого влияния, и вот Скотт Хансельман по этому поводу: http://www.hanselman.com/blog/MicrosoftIE8AndGoogleChromeProcessesAreTheNewThreads. aspx

Я считаю, что потоки работают быстрее? 'c, но только в умеренной степени, и в настоящее время легче ошибаться с потоками.

Я слышал, что .NET 4.0 собирается расширить библиотеку потоков .. Что-то про system.threading.thread.For? И я могу придумать несколько мест, где я бы хотел это сделать ... Для каждого элемента в этом списке из тысячи элементов сделайте что-нибудь.

http://reedcopsey.com/?p=87

7
ответ дан 13 December 2019 в 19:28
поделиться

По следующему URL-адресу вы найдете реальный тест и сравнение fork и pthread_create в реальном приложении, хотя с 2003 года все может немного измениться. Судя по результатам этого теста, похоже, что вилка лучше масштабируется, если у вас более 500 процессов или потоков.

http://bulk.fefe.de/scalable-networking.pdf - страницы 29–32

2
ответ дан 13 December 2019 в 19:28
поделиться

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

В общем, о многопоточности и прочем, я предлагаю вам изучить OpenMP или Intel-TBB. Эти ребята действительно разбираются в многопоточности и высокопроизводительных вычислениях.

1
ответ дан 13 December 2019 в 19:28
поделиться

Все сводится к стоимости изоляции : процессы изолированы друг от друга (например, отдельные ресурсы памяти, защита, отдельные дескрипторы файлов и т. Д.), Тогда как потоки могут совместно использовать ресурсы внутри процесс. Требуются время и ресурсы для поддержки и обеспечения соблюдения этой изоляции .

Как и все в этой вселенной, вы должны «платить» за то, что получаете.

1
ответ дан 13 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: