Modo de rendimiento de objetos: modo de pieza única y modo Hengyuan

Modo de pieza única; los
modos anteriores están todos relacionados con el diseño general del proyecto, como alta cohesión, acoplamiento suelto, polimorfismo y aislamiento. Pero el modelo de rendimiento de objetos no se basa en estos patrones de diseño, sino en el rendimiento del software. De hecho, el singleton implementado con muchos tipos de objetos en el código de la empresa tiene el mismo significado, y el único propósito es si los objetos de este tipo está en Cuando el proyecto tiene una alta frecuencia, si necesita constantemente nuevos objetos en una rutina, entonces el consumo de memoria no es propicio para el desempeño del proyecto. Por lo tanto, existen dos modos de modo de ejecución de objetos. El propósito es lograr que en todo el proyecto, no sea necesario ir siempre al nuevo objeto, sino solo al nuevo, lo cual es bueno para juzgar si no hay ningún objeto nuevo. uno, y si lo hay, utilice el anterior directamente. El significado es muy simple, pero es más problemático implementarlo y considerar el multihilo.

Por ejemplo:
Inserte la descripción de la imagen aquí

En el caso de subprocesos múltiples, se puede solucionar el bloqueo. Por
ejemplo, la
Inserte la descripción de la imagen aquí
lectura de variables no requiere bloqueo, y el bloqueo solo es necesario al escribir para evitar la repetición de diferentes operaciones. Por lo tanto, si está leyendo y adquiriendo el candado, también causa el costo del candado.

Luego verificamos dos veces el bloqueo, si el objeto está vacío, adquiriremos el bloqueo antes de pasar al nuevo objeto.

class Signal
{
public:
	Signal();
	~Signal();
	static Signal * getSignal();
private:
	static Signal * stdSignal;
};
Signal * Signal::getSignal()
{
	if (stdSignal == nullptr)//两次检查、如果只是读那么就不需要去获取锁了。
	{
		Lock lock;
		if (stdSignal == nullptr)
		{
			return new(Signal);
		}
	}
	return stdSignal;

}

Pero también hay problemas, porque juzgamos de acuerdo con if (stdSignal == nullptr) //, pero nuestro compilador de computadora se divide en tres pasos cuando un nuevo objeto, 1, solicita memoria, 2, llama al Constructor, 3, Asignación , pero este es solo el orden predeterminado. En una computadora de varios núcleos, el orden de ejecución también puede ser 132. Luego, en combinación con el subproceso múltiple, puede haber subprocesos que establezcan el valor sin llamar al constructor al crear el objeto. , este es el famoso problema de inseguridad de Reoeder.

Finalmente, hay un método seguro en C ++ 11
Inserte la descripción de la imagen aquí


El modo de origen compartido utiliza tecnología de uso compartido para admitir de manera efectiva una gran cantidad de objetos detallados. (El punto popular es usar un grupo compartido (que puede ser una variedad de contenedores) para administrar objetos. Si existe, regresará directamente, si no, crear y devolver, similar Se usa cuando el modo de una sola pieza es simple y el peso mosca es una serie de una gran cantidad de objetos de grano fino) Por lo tanto, si es necesario usar el modo peso mosca debe ser evaluado.
Por ejemplo

Fornt::Fornt()
{
	string key;
	Fornt(string key){};
}
class ForntFactory
{
public:
	ForntFactory();
	~ForntFactory();
	map<string, Fornt*> forntPoll;
	Fornt * GetFornt(string key)
	{
		bool isExit = forntPoll.find(key);//查找共享池是否存在
		if (!isExit)//存在
		{
			;//返回
		}
		else
		{
			//否则创建。
			//加入共享池,再返回
		}
	}
private:

};

La lógica general es así

Supongo que te gusta

Origin blog.csdn.net/zw1996/article/details/99213073
Recomendado
Clasificación