Puede multithreading ser implementado en un sistema de procesador único?

Siempre he seguido el concepto de que el multithreading, solo puede ser aplicado en múltiples procesadores del sistema, donde hay más de un procesador para ser asignado a cada hilo y cada hilo puede ser ejecutado simultaneoulsy. No hay programación, en este caso, como cada uno de los subproceso independiente los recursos dedicados a ella.
Pero yo recenetly leído que puedo hacer subprocesamiento múltiple en el sistema de procesador único así.
Es correcto? y si sí, entonces ¿cuál es la diferencia entre un procesador y varios sistemas de procesador?

  • Sí, y simplemente, se percibe vs real concurrencia.
  • Si no fuera posible, a continuación, Windows 95 fue una alucinación en masa. (Si usted cuenta multiprocesamiento como multithreading, el original de unix también fue una alucinación en masa.)
  • Si solo fue una alucinación en masa 🙂
InformationsquelleAutor Ayse | 2013-04-20

5 Kommentare

  1. 58

    De curso se puede hacer en un sistema de procesador único, y de hecho es mucho más fácil de esa manera. Funciona de la misma manera como la ejecución de varios procesos: el núcleo, a través de un temporizador de interrupción o de otro mecanismo similar, suspende uno, el ahorro de su estado de la máquina, y la sustitución por la guardados previamente el estado de la otra, la única diferencia es que los dos hilos de un mismo proceso comparten el mismo espacio de memoria virtual, con lo que la tarea del interruptor mucho más eficiente.

    Multi-threading en sistemas multiprocesador es en realidad mucho más difícil, ya que tienes problemas de acceso simultáneo a la memoria de múltiples procesadores/núcleos, y todos los desagradables memoria problemas de sincronización que surgen de eso.

    • Muchas gracias. Que fue muy útil
    • No, debe ser una lectura errónea de que, debido a la declaración como parafrasea está definitivamente mal.
    • ⁺1 para el «temporizador de interrupción». Toda la red de Internet no tiene ninguna mención de cómo exactamente el interruptor se realiza en el hardware; supuse que se trata de algún tipo de temporizador, pero incluso en la Wikipedia está en silencio.
    • si 2 subprocesos que se ejecutan en un procesador…no hay necesidad de sincronización?
    • La respuesta de @Barath post.
  2. 60

    Me recenetly leído que puedo hacer subprocesamiento múltiple en una sola
    procesador de sistema. Es correcto? y si sí, entonces ¿cuál es la
    la diferencia entre un procesador y varios sistemas de procesador?

    Sí, usted puede hacer múltiples hilos en un sistema de procesador único.

    En sistema multi-procesador , múltiples hilos de ejecución , simultáneamente en diferentes núcleos.
    Por ejemplo, Si hay dos hilos y dos núcleos , cada hilo de ejecución individual de núcleo.

    En un sistema de procesador único, múltiples hilos de ejecución , una después de la otra o esperar hasta que un subproceso termina o es reemplazado por el sistema operativo , dependiendo de la prioridad del subproceso y el sistema operativo de la política.Pero la ejecución de los hilos , da una ilusión de que se ejecute simultánea , relativa a la aplicación requerida tiempo de respuesta en el espacio de Usuario de la aplicación.

    Comparación De Tiempo(Ejemplo):

    si dos hilos tomar 10us cada uno a ejecutar, a continuación, en un 2 sistema de procesador , el tiempo neto tomar es 10us

    si dos hilos tomar 10us cada uno a ejecutar, a continuación, en un 1 sistema de procesador , el tiempo neto tomar es 20us

    • muy útil. Gracias 🙂
    • Chrome va fichas en procesos, no subprocesos. La afirmación de que los hilos de mejorar la estabilidad está mal. No es posible que un hilo se bloquee y deje el resto en ejecución. Desde todos los hilos de un proceso comparten un espacio de direcciones, todos ellos son potencialmente afectados por cualquiera de hilo clobbering de memoria. Además, la terminación involuntaria causada por un hilo de «estrellarse» termina todo el proceso, no solo de un hilo.
    • Ok me he quitado la parte controversial….quizás no he leído lo suficiente para respaldar y justificar la estabilidad de los hilos…
    • La única manera que puedo ver un argumento de que los hilos «mejorar la estabilidad» es por simplificar el código y cometer errores menos probable. Es mucho más fácil escribir sincrónico de la lógica que se ejecuta en su propio hilo de asincrónico, evento impulsado por el estado-la lógica de la máquina, y esto se podría traducir en más seguro, más estable programas. Sin embargo hilos no te dan ninguna seguridad de que si uno de ellos invoca la UB.
    • Creo que BarathBushan la respuesta es hepful y la gente debe evitar abajo de la votación es: ()
    • Yo diría que «en la mayoría de 20us»..

  3. 7

    Puede tener más de cuatro hilos activos en un quad core sistema. Hay es programación, a menos que se pueda garantizar que los procesos no intente crear más hilos de los que hay procesadores.

    Sí, usted puede tener varios hilos en un solo núcleo equipo.

    La diferencia entre el procesador y los sistemas multiprocesador es que un sistema multi-procesador de hecho puede hacer más de una cosa a la vez. Se puede hacer de N cosas a un tiempo, donde N es el número de núcleos de procesador. De un solo núcleo de procesador sólo puede hacer una cosa a la vez. Como WhozCraig dijo en su comentario, es la diferencia entre el número real y la percepción de la simultaneidad.

    • Muchas gracias, tengo la idea básica ahora cómo se hacen las cosas
  4. 5

    He aquí un ejemplo muy simplificado. Es en realidad un prototipo para un programa que estoy construyendo. Es una aplicación de la multitarea cooperativa en un único hilo.

    main simplemente establece el quit bandera falsa, y rellena una matriz de punteros a funciones (las tareas) y, a continuación, llama a loop.

    loop utiliza setjmp para establecer un punto de retorno para un no-local de salto (salto a cabo de la función de vuelta a un lugar anterior en la ejecución) y, a continuación, procede a llamar a la primera tarea (función).

    Cada tarea termina con yield(). Es decir, ninguno de la tarea de las funciones de realidad return. No sólo no contienen un return; declaración (que estaría bien, ya que son void funciones, es decir,. los procedimientos), pero no llegar a la return incluso si él estaba allí porque yield salta a la setjmp llamar, esta vez dando un 1 a la if declaración en loop. La declaración controlado por el if instrucción selecciona una tarea diferente antes de volver a entrar en el while bucle.

    Para cada tarea de la función se ejecuta varias veces, dando a la el despachador de (el if(setjmp... declaración) que se selecciona una nueva tarea para que se ejecute.

    #include <stdio.h> 
    #include <setjmp.h> 
    
    jmp_buf dispatch; 
    int ntasks; 
    void (*task[10])(void); 
    int quit; 
    
    void yield(void) { 
        longjmp(dispatch, 1); 
    } 
    
    void loop() { 
        static int i = 0; 
        if(setjmp(dispatch)) 
            i = (i+1) % ntasks; 
        while(!quit) 
            task[i](); 
    } 
    
    int acc = 0; 
    
    void a(void) { 
        if (acc > 10) quit = 1; 
        printf("A\n"); 
        yield(); 
    } 
    void b(void) { 
        acc *= 2; 
        printf("B\n"); 
        yield(); 
    } 
    void c(void) { 
        acc += 1; 
        printf("C\n"); 
        yield(); 
    } 
    
    int main() { 
        quit = 0; 
        ntasks = 3; 
        task[0] = a; 
        task[1] = b; 
        task[2] = c; 
        loop(); 
        return 0; 
    } 

    La diferencia entre este ejemplo y con un único procesador multitarea sistema informático es el verdadero procesador admite interrupción de una tarea en el medio de ejecución y reanudar más tarde desde el mismo lugar. Esto no es realmente posible en un C simulación con tareas como funciones individuales. Sin embargo, las tareas que podría estar compuesto de una secuencia de funciones de C que producen a la estación de despacho (un array de punteros a función, tal vez, o un vínculo de la lista).

    • Por favor, puedes agregar algún tipo de descripción o comentario para explicar exactamente lo que se supone que es esto mostrando y haciendo? Gracias.
    • Editado con un poco de explicación. (Puedo añadir más si es necesario).
    • No parece que haya ninguna manera de volver de un yield(), por lo que cada hilo tiene que completar antes de llamadas de rendimiento. Así que no hay manera de tener más de un hilo de vivir en un tiempo y no hay manera de cambiar entre ellos. Así que usted podría hacer cosas mucho más sencillo al tener sólo las tareas de retorno (en lugar de llamar rendimiento) y no uso setjmp/longjmp a todos.
  5. 3

    Sí, completamente.
    Hace años (Win 95?) fuimos de Multitarea Cooperativa en el Multithreading, porque siempre hay alguien que la pata de la cooperativa de parte.
    Cada programa en su equipo tiene al menos un hilo. Posiblemente más. Y el de la CPU y mantener la conmutación entre los todos los hilos como un loco un par de millones de veces por segundo. Si ninguna de ellas tiene nada que ver, incluso podría ir inactivo por algún tiempo.

    Sistemas multinúcleo sólo significa que dos o más de esos hilos pueden ejecutar en paralelo.

    Sin embargo, trae mucho menos para hacerlo. Todo lo que puedes hacer con subprocesamiento múltiple en un Único Núcleo de la máquina es simular la Multitarea.

    Mulitasking es suficiente para evitar que la interfaz gráfica de usuario hilo se bloqueen debido a una operación duradera. Sin embargo, es generalmente complicado de implementar, a menos que tenga un poco de ayuda del Compilador o de Idioma (como C# async…esperan).
    Como resultado, muchos GUI programador utiliza el Multithreading y de Invocar a los falsos multitarea. Si el código se ejecuta en uno o varios núcleos no mater de este.

    Lo que es más importante, la Multitarea NO es adecuado para la CPU operaciones. Pero el 95% de todos los Async problemas no son la CPU. Son de la Red o en el Disco Atado.
    En un singlecore equipo, subprocesamiento múltiple también no ayuda con la CPU cosas. Si tienes dos hilos que ambos necesitan un 100% de tiempo de CPU (el mismo programa, o uno diferente), pero sólo un núcleo a ejecutar en la CPU sólo tienes que cambiar entre los que se ejecuta tanto en el 49% y usar el restante 2% para todos los otros hilos que sólo un poco.

    Finalmente sólo muy pocos problemas, en realidad puede ser Multiproceso. Sólo trate de multithread de la Secuencia de Fibonacci (un hilo para cada par) sin hacer más lento, más memoria exigentes y más complejo.

    tl;dr;
    Usted necesidad de subprocesamiento múltiple con varios Núcleos y una computadora para la CPU problemas.
    La mayoría de los async problemas no son la CPU. La multitarea es suficiente. Y usted puede totalmente multitarea, el uso de hilos, incluso en un único núcleo de la máquina.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea