минимальный размер работы goroutine [закрывается]

Singleton не ужасный шаблон, хотя это , неправильно использовал много. Я думаю, что это неправильное употребление состоит в том, потому что это - один из более легких шаблонов, и самый в новинку для одиночного элемента притягиваются к глобальному побочному эффекту.

Erich Gamma сказал, что одиночный элемент является шаблоном, которого он желает, не был включен в книгу GOF, и это - плохой дизайн. Я склонен не соглашаться.

, Если шаблон используется для создания единственного экземпляра объекта в любой момент времени затем, шаблон используется правильно. Если одиночный элемент используется для предоставления глобального эффекта, он используется неправильно.

Недостатки:

  • Вы связываетесь с одним классом всюду по коду, который звонит, одиночный элемент
    • Создает стычку с поблочным тестированием, потому что трудно заменить экземпляр фиктивным объектом
    • , Если код должен быть пересмотрен позже из-за потребности больше чем в одном экземпляре, это более болезненно, чем если бы singleton-класс был передан в объект (использование интерфейса), который использует его

Преимущества:

  • Один экземпляр класса представлен в любом данном моменте времени.
    • дизайном Вы осуществляете это
  • , Экземпляр создается, когда он необходим
  • , Глобальный доступ является побочным эффектом

5
задан Mark 14 November 2009 в 04:15
поделиться

4 ответа

I've been plodding through project euler with Go. While I don't have a definite answer for you I found the goroutine-based primality sieve in the Go docs to be an order of magnitude slower than simply checking each number for primality. Setting GOMAXPROCS to a higher value didn't help, either.

3
ответ дан 14 December 2019 в 08:53
поделиться

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

Подумайте об объектно-ориентированной системе и представьте, что задаете тот же вопрос о том, следует ли вам создавать экземпляр объекта.

Сделайте то же самое. это сначала имеет смысл.

3
ответ дан 14 December 2019 в 08:53
поделиться

горутины легковесны и не занимают много ресурсов. Вы должны использовать их там, где это уместно для решения проблемы. В настоящее время go не кажется исключительно хорошим при использовании нескольких ядер (кажется, слишком много накладных расходов при выделении дополнительных потоков хоста.)

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

0
ответ дан 14 December 2019 в 08:53
поделиться

Использование горутин - это не только эффективность оборудования. Иногда они упрощают написание программного обеспечения и упрощают устранение ошибок. Язык позволяет программисту естественно и просто выражать параллелизм. Для меня это многого стоит.

Мой собственный опыт работы с проблемами, которые являются естественными кандидатами на параллелизм, показывает, что go easy позволяет мне максимально использовать все доступные ядра для задач, связанных с процессором, используя тривиальный подход «разброс / сбор». Ваш пробег может отличаться.

Хотей

1
ответ дан 14 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

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