Ошибка AWS Codebuild при установке SASSC gem неправильная версия ruby

Ответ на «большой железо» - это, как правило, один поток на один ограниченный ресурс - процессор (привязка к ЦП), рука (привязка ввода / вывода) и т. д. - но это работает только в том случае, если вы можете перенаправить работу на нужную нить для доступ к ресурсу.

Если это невозможно, считайте, что у вас есть взаимозаменяемые ресурсы (ЦП) и неисправимые ресурсы (оружие). Для процессоров не важно назначать каждый поток конкретному процессору (хотя он помогает в управлении кешем), но для оружия, если вы не можете назначить нить в руку, вы попадаете в теорию массового обслуживания и оптимальное количество, чтобы держать оружие занятый. В общем, я думаю, что если вы не можете направлять запросы на основе используемой руки, то будет иметься 2-3 потока на руку.

Усложнение возникает, когда единица работы переданный в поток, не выполняет разумно атомную единицу работы. Например, у вас может быть поток в одной точке доступа к диску, в другой точке ждут в сети. Это увеличивает количество «трещин», где дополнительные потоки могут проникать и делать полезную работу, но это также увеличивает возможность добавления дополнительных потоков для загрязнений кэшей друг друга и т. Д. И путаницу системы.

Of Конечно, вы должны взвесить все это против «веса» нити. К сожалению, большинство систем имеют очень тяжелые потоки (и то, что они называют «легкими потоками», часто не являются нитями вообще), поэтому лучше ошибиться на низкой стороне.

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

0
задан bradpotts 31 December 2018 в 04:42
поделиться