Spring отходит от файлов XML и сильно использует аннотации. Следующий пример представляет собой простое автономное приложение Spring, которое использует аннотацию вместо XML-файлов.
package com.zetcode.bean;
import org.springframework.stereotype.Component;
@Component
public class Message {
private String message = "Hello there!";
public void setMessage(String message){
this.message = message;
}
public String getMessage(){
return message;
}
}
Это простой компонент. Он украшен аннотацией @Component
для автоматического обнаружения весенним контейнером.
package com.zetcode.main;
import com.zetcode.bean.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan(basePackages = "com.zetcode")
public class Application {
public static void main(String[] args) {
ApplicationContext context
= new AnnotationConfigApplicationContext(Application.class);
Application p = context.getBean(Application.class);
p.start();
}
@Autowired
private Message message;
private void start() {
System.out.println("Message: " + message.getMessage());
}
}
Это основной класс Application
. Аннотации @ComponentScan
ищут компоненты. Аннотации @Autowired
вводят компонент в переменную message
. AnnotationConfigApplicationContext
используется для создания контекста приложения Spring.
Мой учебник Standalone Spring показывает, как создать автономное приложение Spring с XML и аннотациями.
Я нашел ответ.
Во-первых, давайте посмотрим на параметр MONITOR / MWAIT в BIOS в ядре 4.18.7. В этом ядре будет использоваться драйвер intel_idle , этот драйвер только проверяет, поддерживает ли система инструкцию mwait, и не заботится о том, включено ли C-состояние. После использования инструкции MONITOR / MWAIT будет использован драйвер intel_idle, а принудительное использование C-состояния будет похоже на использование режима энергосбережения.
Во-вторых, почему insn за цикл отличается? Потому что используется сервис , настроенный , а активный профиль - «производительность с задержкой», значение force_latency равно 1us. Если вы используете C-состояние, будет использоваться уровень C-состояния, задержка которого меньше, чем force_latency;
# cpupower idle-info
CPUidle driver: intel_idle
CPUidle governor: menu
analyzing CPU 0:
Number of idle states: 5
Available idle states: POLL C1 C1E C3 C6
POLL:
Flags/Description: CPUIDLE CORE POLL IDLE
Latency: 0
Usage: 13034605
Duration: 820867557
C1:
Flags/Description: MWAIT 0x00
Latency: 2
Usage: 349471619
Duration: 344311623672
C1E:
Flags/Description: MWAIT 0x01
Latency: 10
Usage: 237
Duration: 55999
C3:
Flags/Description: MWAIT 0x10
Latency: 40
Usage: 350
Duration: 168988
C6:
Flags/Description: MWAIT 0x20
Latency: 133
Usage: 3696
Duration: 17809893
Вы увидите только уровень POLL, задержка которого меньше 1us, а уровень POLL заставит ЦП запустить с инструкцией NOP. В этой ситуации, если вы используете технологию Hyper-Threading, скорость выполнения команды упадет вдвое. Поскольку два логических ядра будут использовать один и тот же ALU, а одно из них выполняет инструкцию NOP, это приведет к тому, что другому придется его ждать.
И если вы сделаете опцию MONITOR / MWAIT отключенной, драйвер intel_idle будет отключен, так что force_latency настроенной службы не будет использоваться, а одна из логических ядер остановится, сделайте другую для использования Эксклюзив ALU.
Наконец, спасибо всем, особенно @Peter Cordes и @osgx, за то, что я проверил BIOS, и команда echo 2^1234567%2 | bc
очень красивая!