Singleton не ужасный шаблон, хотя это , неправильно использовал много. Я думаю, что это неправильное употребление состоит в том, потому что это - один из более легких шаблонов, и самый в новинку для одиночного элемента притягиваются к глобальному побочному эффекту.
Erich Gamma сказал, что одиночный элемент является шаблоном, которого он желает, не был включен в книгу GOF, и это - плохой дизайн. Я склонен не соглашаться.
, Если шаблон используется для создания единственного экземпляра объекта в любой момент времени затем, шаблон используется правильно. Если одиночный элемент используется для предоставления глобального эффекта, он используется неправильно.
Недостатки:
Преимущества:
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.
горутина - это абстракция, которую вы используете, если она помогает вам лучше моделировать ваше приложение. Вы занимаетесь программированием, ориентированным на параллелизм, поэтому подумайте о частях вашего приложения, в которых есть параллелизм.
Подумайте об объектно-ориентированной системе и представьте, что задаете тот же вопрос о том, следует ли вам создавать экземпляр объекта.
Сделайте то же самое. это сначала имеет смысл.
горутины легковесны и не занимают много ресурсов. Вы должны использовать их там, где это уместно для решения проблемы. В настоящее время go не кажется исключительно хорошим при использовании нескольких ядер (кажется, слишком много накладных расходов при выделении дополнительных потоков хоста.)
Я думаю, что реальный вопрос заключается в том, когда использовать несколько ядер, а не когда использовать горутины. Ответ на это, вероятно, такой же, как и для других языков и дополнительных хост-процессов. (К сожалению, вы не можете легко указать, когда горутина должна занимать новый хост-процесс или какой процесс она должна занимать.)
Использование горутин - это не только эффективность оборудования. Иногда они упрощают написание программного обеспечения и упрощают устранение ошибок. Язык позволяет программисту естественно и просто выражать параллелизм. Для меня это многого стоит.
Мой собственный опыт работы с проблемами, которые являются естественными кандидатами на параллелизм, показывает, что go easy позволяет мне максимально использовать все доступные ядра для задач, связанных с процессором, используя тривиальный подход «разброс / сбор». Ваш пробег может отличаться.
Хотей