2011-05-28 14 views
7

Actualmente no estoy seguro, trato de hacer un servidor de alto rendimiento, obtuve una CPU 6Core, así que si utilizara el diseño "io_service_per_cpu", tengo 6 io_service De.boost :: asio threadpool vs. io_service_per_cpu design

Ya he escuchado que el diseño de subprocesos no es el mejor, pero no estoy seguro de eso.

¿Qué conocimiento tienes? ¿Alguien ya hizo una prueba de estrés con cada uno, o alguna otra cosa?

Respuesta

6

En mi experiencia, es mucho más fácil acercarse diseño asíncrono aplicación con el siguiente orden:

  1. hilo único y un único io_service
  2. múltiples hilos, cada uno invocando io_service::run() de un solo io_service. Use strands para controladores que requieren acceso a estructuras de datos compartidas.
  3. io_service por CPU

La motivación para cambiar entre cada uno de estos diseños se debe hacer después de perfilar su aplicación. Tenga en cuenta que el ejemplo HTTP Server 2 solo muestra cómo usar un io_service por CPU, no le muestra cuándo ni por qué utilizar dicho diseño.

4

Otra buena forma de abordar esto: inicie varias copias de su proceso y enlace cada una a un núcleo diferente utilizando sus sistemas operativos. Para FreeBSD, use cpuset. El sistema operativo va a hacer un mejor trabajo que cualquier otro código de usuario. Luego debe usar un equilibrador de carga externo para distribuir la carga entre las instancias de su servidor. Puntos extra para vincular una NIC interrumpe a una CPU en particular.