La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Aplicaciones Multi-Threads-I Ernesto Cuadros -V argas Sociedad Peruana de Computación Perú

Presentaciones similares


Presentación del tema: "Aplicaciones Multi-Threads-I Ernesto Cuadros -V argas Sociedad Peruana de Computación Perú"— Transcripción de la presentación:

1 Aplicaciones Multi-Threads-I Ernesto Cuadros -V argas Sociedad Peruana de Computación Perú

2 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 2 Organización de la presentación Conceptos Básicos; Conceptos Básicos; Operaciones con hebras; Operaciones con hebras; Tipos de hebras; Tipos de hebras; Comunicación entre hebras; Comunicación entre hebras; Fibras; Fibras; Otros puntos importantes; Otros puntos importantes; DEMOS; DEMOS; Sugerencias y conclusiones. Sugerencias y conclusiones.

3 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 3 Conceptos básicos programa programa programa = algoritmos + ED; proceso proceso abstracción de un programa en ejecución; hebras o threads hebras o threads secuencia de ejecución de un proceso;

4 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 4 Programa-Proceso-Hebra Memoria cargador

5 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 5 Programación Multi-Threads crear programas capaces de ejecutar más de una tarea en paralelo; crear programas capaces de ejecutar más de una tarea en paralelo; las hebras pueden estar en el mismo proceso; las hebras pueden estar en el mismo proceso; estamos preparados para aprovechar mas de un procesador. estamos preparados para aprovechar mas de un procesador.

6 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 6 Origen de las hebras Tiempo Proceso 1

7 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 7 Origen de las hebras (cont) Tiempo P2 P1

8 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 8 Algunos ejemplos manejadores de Bases de Datos; manejadores de Bases de Datos; servidores de Web; servidores de Web; servidores de FTP; servidores de FTP; grabación en segundo plano (ej. Word); grabación en segundo plano (ej. Word); compilación sin parar la edición, etc; compilación sin parar la edición, etc; nuestra vida diaria (trabajo en grupo, tareas en paralelo). nuestra vida diaria (trabajo en grupo, tareas en paralelo).

9 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 9 Evolución sistemas monotareas vs. sistemas multitasking sistemas monotareas vs. sistemas multitasking programas ST vs programas MT programas ST vs programas MT

10 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 10 Ventajas mayor aprovechamiento de la capacidad ociosa del procesador; mayor aprovechamiento de la capacidad ociosa del procesador; podemos aprovechar mas de un procesador; podemos aprovechar mas de un procesador; mayor paralelismo; mayor paralelismo; menor tiempo de respuesta que en forma secuencial, etc. menor tiempo de respuesta que en forma secuencial, etc.

11 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 11 Desventajas mayor complejidad; mayor complejidad; mayor cantidad de recursos necesarios (memoria, etc); mayor cantidad de recursos necesarios (memoria, etc); política de planificación de procesos. política de planificación de procesos.

12 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 12 Cuándo usar MT ? cuando mi programa presenta bloques independientes; cuando mi programa presenta bloques independientes; cuando tengo una pérdida de tiempo considerable por operaciones de I/O; cuando tengo una pérdida de tiempo considerable por operaciones de I/O; NÚMERO DE PROCESADORES. NÚMERO DE PROCESADORES.

13 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 13 Transicion de ST a MT las hebras de ejecutan independientes unas de las otras Problemas ! las hebras de ejecutan independientes unas de las otras Problemas ! sincronización sincronización en el mismo proceso (sibling Threads); en procesos diferentes.

14 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 14 Planificador de procesos (Scheduler) Bloqueado (Blocked) Listos (Ready) Corriendo (Running)

15 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 15 Scheduler para 2 procesadores P1 Listos (Ready) Corriendo (Running) Bloqueado (Blocked) P5P7 P4 P6 P2 P3P8

16 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 16 Proceso vs Hebra una pila (Stack); una pila (Stack); entrada en el Scheduler; registros de la CPU; registros de la CPU; program counter, etc. program counter, etc. archivos abiertos; archivos abiertos; variables globales; variables globales; memoria asignada dinamicamente, etc. memoria asignada dinamicamente, etc.

17 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 17 Necesidad de Sincronización Ejemplos utilizando en la plataforma Win32

18 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 18 Problemas relacionados a la programación MT Atomicidad; Atomicidad; Exclusión mutua: Exclusión mutua: pedir un recurso, liberar el recurso Race Conditions: Race Conditions: Un bug que depende del orden en el que se ejecuten dos o más tareas independientes

19 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 19 Atomicidad y exclusión mutua

20 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 20 Atomicidad (cont) HANDLE hIOMutex= ::CreateMutex (NULL, FALSE, 0); // Pedir acceso al recurso ::WaitForSingleObject( hIOMutex, INFINITE ); // Realizar nuestra operación crítica ::fseek( fp, desired_position, 0L ); ::fwrite( data, sizeof( data ), 1, fp ); // Liberar el acceso al recurso ::ReleaseMutex(hIOMutex);

21 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 21 Race Conditions

22 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 22 Problemas relacionados a programación MT (cont) Deadlock; Deadlock; Diseño de clases seguras para ambientes MT; Diseño de clases seguras para ambientes MT; Starvation (morir de hambre) Starvation (morir de hambre) Threads de prioridades altas siempre ganaran el procesador.

23 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 23 Deadlock (bloqueo mutuo)

24 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 24 Clases seguras para ambientes MT void MyClass::PrintHistorico() { m_report = Historico; Imprimir(); } void MyClass::Imprimir() { switch(m_report) { case Datos_Personales: …… break; case Datos_Personales: …… break; } } Thread1 Thread2 void MyClass::PrintPersonalInfo() { m_report = Datos_Personales; Imprimir(); }

25 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 25 Mecanismos de Sincronización por la cantidad de estados: por la cantidad de estados: binarios, de múltiples estados. por su alcance: por su alcance: dentro del mismo proceso, entre procesos.

26 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 26 Por la cantidad de estados binarios binarios Events (CEvent), CriticalSection (CCriticalSection), Mutex (CMutex). de múltiples estados: de múltiples estados: Semáforos (CSemaphore)

27 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 27 Por su alcance dentro del mismo proceso: dentro del mismo proceso: CriticalSection entre procesos: entre procesos: Event, Mutex, Semáforos, también sirven en el mismo proceso.

28 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 28 Entre procesos Semáforo Impresion Handle(7) Semáforo Impresion Handle(35) Proceso 1 Proceso 2 Win32 Semaphore Impresion Kernel Object Usage Counter=2 More information ….

29 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 29 Tipos de hebras worker threads o hebras trabajadoras; worker threads o hebras trabajadoras; hebras con interface de usuario. hebras con interface de usuario.

30 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 30 Worker Thread para tareas en background o en segundo plano; para tareas en background o en segundo plano; cuando no necesitamos enviar o recibir mensajes a través de ventanas; cuando no necesitamos enviar o recibir mensajes a través de ventanas; no es necesario interactuar con la hebra. no es necesario interactuar con la hebra.

31 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 31 Pasos para crear una Worker Thread programar una función que será al main de la hebra, programar una función que será al main de la hebra, crear la hebra propiamente dicha con alguna de las funciones API (CreateThread, _beginthread) crear la hebra propiamente dicha con alguna de las funciones API (CreateThread, _beginthread)

32 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 32 Paso 1: Programar una función que será el main de la hebra DWORD WINAPI MyThreadMain(LPVOID lpParameter) { CStudent *pMyObj = (CStudent *)lpParameter; pMyObj->MyMethod1(); pMyObj->MyMethod2();. return 0L;}

33 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 33 Paso 2: Creación de una Thread con CreateThread HANDLE CreateThread( // puntero a los atributos de securidad LPSECURITY_ATTRIBUTES lpThreadAttributes, // Tamaño inicial del Stack para esta hebra DWORD dwStackSize, // puntero a la función de la hebra LPTHREAD_START_ROUTINE lpStartAddress, // argumento para la nueva hebra LPVOID lpParameter, // atributos de creación DWORD dwCreationFlags, // puntero para recibir el ID de la hebra LPDWORD lpThreadId );

34 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 34 Paso 2: Creación de una Thread con CreateThread (cont) CStudent *pMyObj = new CStudent; DWORD ThreadID; HANDLE myhandle = CreateThread( NULL, 4096, &MyThreadMain, (LPVOID)pMyObj, 0, // CREATE_SUSPENDED &ThreadId );

35 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 35 Hebras usando C Run-Time Library void __cdecl MyThreadMain2(void *lpParameter) { CStudent *pMyObj = (CStudent *)lpParameter; pMyObj->MyMethod1(); pMyObj->MyMethod2();. return 0L;}

36 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 36 Paso 2: Creación de una Thread con _beginthread (cont) unsigned long _beginthread( // Puntero a la funcion que controlará la hebra void( __cdecl *start_address )( void * ), // Tamaño del stack unsigned stack_size, // Lista de argumentos void *arglist ); HANDLE handle = (HANDLE)_beginthread( & MyThreadMain2, 4096, NULL);

37 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 37 Operaciones básicas con una hebra ::WaitForSingleObject(hThread, 5); ::WaitForSingleObject(hThread, INFINITE); ::SuspendThread(hThread); ::SuspendThread(hThread); ::ResumeThread(hThread); ::ResumeThread(hThread);

38 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 38 Prioridades de una Thread (SetThreadPriority) ::SetThreadPriority(hThread, THREAD_PRIORITY_ABOVE_NORMAL); THREAD_PRIORITY_ABOVE_NORMAL; THREAD_PRIORITY_ABOVE_NORMAL; THREAD_PRIORITY_BELOW_NORMAL; THREAD_PRIORITY_BELOW_NORMAL; THREAD_PRIORITY_HIGHEST; THREAD_PRIORITY_HIGHEST; THREAD_PRIORITY_IDLE; THREAD_PRIORITY_IDLE; THREAD_PRIORITY_LOWEST; THREAD_PRIORITY_LOWEST; THREAD_PRIORITY_NORMAL; THREAD_PRIORITY_NORMAL; THREAD_PRIORITY_TIME_CRITICAL. THREAD_PRIORITY_TIME_CRITICAL.

39 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 39 Prioridades para todo el proceso ::SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); HIGH_PRIORITY_CLASS; HIGH_PRIORITY_CLASS; IDLE_PRIORITY_CLASS; IDLE_PRIORITY_CLASS; NORMAL_PRIORITY_CLASS; NORMAL_PRIORITY_CLASS; REALTIME_PRIORITY_CLASS. REALTIME_PRIORITY_CLASS.

40 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 40 Demo Worker Threads Break !

41 Aplicaciones Multi-Threads-II Ernesto Cuadros - Vargas Sociedad Peruana de Computación Piura-Perú

42 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 42 Hebras con interface útiles cuando necesitamos enviar mensajes o interactuar a través de algún mecanismo visible al usuario (generalmente una ventana) útiles cuando necesitamos enviar mensajes o interactuar a través de algún mecanismo visible al usuario (generalmente una ventana) existe la clase CWinThread (MFC) existe la clase CWinThread (MFC)

43 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 43 Secuencia de creación crear la clase heredada de CWinThread (inicialmente esta vacía); crear la clase heredada de CWinThread (inicialmente esta vacía); BOOL CMyThread::InitInstance() { return TRUE; } crear la hebra hija; crear la hebra hija;

44 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 44 Crear la hebra hija void CMainFrame::OnNuevaThread() { // TODO: Add your command handler code here CRuntimeClass *pRuntimeClass = RUNTIME_CLASS(CMyThread); CMyThread *pMyThread = (CMyThread *)pRuntimeClass->CreateObject(); pMyThread->CreateThread(); }

45 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 45 Crear la hebra hija (cont) BOOL CMyThread::InitInstance() {CSingleDocTemplate* pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CTeste2Doc), // clase del documento RUNTIME_CLASS(CMainFrame), // clase del MainFrame RUNTIME_CLASS(CTeste2View)); // clase del área de cliente // Crear un nuevo documento para esta ventana CDocument *pDoc = pDocTemplate->CreateNewDocument(); // Crear la ventana propiamente dicha m_pMainWnd = pDocTemplate->CreateNewFrame(pDoc, NULL); // Hacerla visible m_pMainWnd->ShowWindow(SW_SHOW); // Enviarle un mensage de actualizacion m_pMainWnd->UpdateWindow(); return TRUE; }

46 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 46 Comunicación entre ventanas y/o hebras colas de mensajes colas de mensajes de tamaño fijo en Win16 dinámicas en Win32 (listas enlazadas) SendMessage SendMessage PostMessage PostMessage PostThreadMessage PostThreadMessage SendMessageTimeout SendMessageTimeout

47 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 47 PostMessage PostMessage(HWND hWnd, UINT msg, WPARAM, LPARAM); PostMessage(HWND hWnd, UINT msg, WPARAM, LPARAM); coloca el mensaje en la fila de la hebra que creó hWnd y retorna. coloca el mensaje en la fila de la hebra que creó hWnd y retorna.

48 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 48 SendMessage SendMessage(HWND hWnd, UINT msg, WPARAM, LPARAM) SendMessage(HWND hWnd, UINT msg, WPARAM, LPARAM) coloca el mensaje en la fila de la hebra que creó hWnd coloca el mensaje en la fila de la hebra que creó hWnd espera hasta que el mensaje sea procesado espera hasta que el mensaje sea procesado retorna retorna

49 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 49 PostThreadMessage PostThreadMessage(DWORD ThreadID, UINT msg, WPARAM, LPARAM) PostThreadMessage(DWORD ThreadID, UINT msg, WPARAM, LPARAM) coloca el mensaje en la fila de la hebra identificada con ThreadID coloca el mensaje en la fila de la hebra identificada con ThreadID retorna retorna

50 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 50 Importante: SendMessage (entre ventanas) una ventana procesa sus mensajes cuando la hebra que la creo esta activa! una ventana procesa sus mensajes cuando la hebra que la creo esta activa! un mensaje siempre va a la cola de mensajes de la hebra que la creó. un mensaje siempre va a la cola de mensajes de la hebra que la creó.

51 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 51 Creando una función para recibir mensajes LRESULT CMyThread::MyFuncion( LPARAM wParam, LPARAM lParam) { // Aqui debemos agregar nuestro código return 0L; }

52 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 52 Mapeando un mensaje a una función en la clase heredada de CWinThread BEGIN_MESSAGE_MAP(CMyThread, CWinThread) //{{AFX_MSG_MAP(CMyThread) //{{AFX_MSG_MAP(CMyThread) ON_THREAD_MESSAGE(WM_MYMESSAGE, MyFuncion) ON_THREAD_MESSAGE(WM_MYMESSAGE, MyFuncion) //}}AFX_MSG_MAP //}}AFX_MSG_MAP END_MESSAGE_MAP() // #define WM_MYMESSAGE (WM_USER+1) ……. LRESULT CMyThread::MyFuncion( LPARAM wParam, LPARAM lParam) {// Aqui debemos agregar nuestro código return 0L; }

53 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 53 Mapeando un mensaje a una función de una ventana BEGIN_MESSAGE_MAP(CMyEdit, CEdit) //{{AFX_MSG_MAP(CMyThread) //{{AFX_MSG_MAP(CMyThread) ON_THREAD_MESSAGE(WM_MYMESSAGE, MyFuncion) //}}AFX_MSG_MAP //}}AFX_MSG_MAP END_MESSAGE_MAP() // #define WM_MYMESSAGE (WM_USER+1) ……. LRESULT CMyThread::MyFuncion( LPARAM wParam, LPARAM lParam) {// Aqui debemos agregar nuestro código return 0L; }

54 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 54 Comunicación entre ventanas y/o hebras (cont) SendMessageCallback SendMessageCallback VOID CALLBACK SendMessageCallback( HWND hWnd, UINT uMsg, DWORD dwData, LRESULT lResult);

55 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 55 Comunicación entre ventanas y/o hebras (cont) SendNotifyMessage SendNotifyMessage coloca el mensaje en la cabeza de la lista de la otra hebra y retorna; si esta en la misma hebra se comporta igual que SendMessage. MsgWaitForMultipleObjects MsgWaitForMultipleObjects espera por mensajes en su propia fila de mensajes.

56 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 56 Otras formas de comunicación Memoria Compartida (Shared Memory), Memoria Compartida (Shared Memory), Archivos Mapeados a memoria (Memory Mapped Files), Archivos Mapeados a memoria (Memory Mapped Files), Tubos Anónimos (Anonymous Pipes), Tubos Anónimos (Anonymous Pipes),

57 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 57 Memoria Compartida (Shared Memory & Memory Mapped Files) crear el archivo (CreateFile, OpenFile) crear el archivo (CreateFile, OpenFile) CreateFileMapping CreateFileMapping MapViewOfFile MapViewOfFile

58 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 58 Memoria Compartida (Shared Memory & Memory Mapped Files) HANDLE hFile, hMapping; LPVOID lpBaseAddress; // mapear el archivo … hFile = CreateFile( "somefile.dat",...); hMapping = CreateFileMapping( hFile,...); lpBaseAddress = MapViewOfFile( hMapping,...); // MapViewOfFile incrementó los contadores de uso de los objetos… CloseHandle(hFile); CloseHandle(hMapping); // usar lpBaseAddress aquí... UnmapViewOfFile(lpBaseAddress); // decrementa los contadores de uso de hFile y hMapping // destruyéndolos DEMO

59 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 59 Tubos (Pipes) tubos bidireccionales para pasar datos, tubos bidireccionales para pasar datos, anónimos (Win95, WinNT, etc) named Pipes (sólo se pueden crear desde WinNT, pero pueden ser abiertos desde Win95) remotamente remotamente \\.\pipe\mi-nuevo-pipe

60 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 60 Tubos (Pipes) (cont) poseen dos conductos poseen dos conductos Lectura, Escritura envío de datos: First In First Out (FIFO) envío de datos: First In First Out (FIFO)

61 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 61 Tubos Anónimos (Anonymous Pipes) BOOL CreatePipe( // pointer to read handle PHANDLE hReadPipe, // pointer to write handle PHANDLE hWritePipe, // pointer to security attributes LPSECURITY_ATTRIBUTES lpPipeAttributes, // pipe size DWORD nSize);

62 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 62 Fibras unidad de ejecución que puede ser manualmente activada por la aplicaciones; el usuario puede decidir cuando darle el procesador a otra fibra; corren en el contexto de una hebra; una hebra puede controlar múltiples fibras.

63 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 63 Fibras (cont) en general no ofrecen ventajas sin son comparadas con una aplicación Multi- hebras bien diseñada; mejor aprender a controlas bien las hebras.

64 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 64 Fibras (cont) ConvertThreadToFiber CreateFiber DeleteFiber GetCurrentFiber GetFiberData SwitchToFiber

65 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 65 Otros puntos importantes MCL (Multithreading Class Library); MCL (Multithreading Class Library); depuración de hebras; depuración de hebras; ningún depurador substituye un buen diseño previo. ningún depurador substituye un buen diseño previo.

66 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 66 Experimentos: El problema de los filósofos

67 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 67 Experimentos: Proyecto Informedia-CMU Fastmap ST vs. Fastmap MT (2-CPUs)

68 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 68 Sugerencias la naturaleza del problema; la naturaleza del problema; atomicidad del código (el Scheduler podría parar la ejecución); atomicidad del código (el Scheduler podría parar la ejecución); estados de espera óptimos; estados de espera óptimos; cantidad de hebras. cantidad de hebras.

69 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 69 Conclusiones depende de la naturaleza del problema mas que del tipo de máquina, depende de la naturaleza del problema mas que del tipo de máquina, los programas MT pueden correr con una CPU pero están preparados para trabajar con mas CPU, los programas MT pueden correr con una CPU pero están preparados para trabajar con mas CPU, el número de hebras está vinculado al número de procesadores y a la cantidad de operaciones con I/O. el número de hebras está vinculado al número de procesadores y a la cantidad de operaciones con I/O.

70 Ernesto Cuadros-Vargas SPC Aplicaciones Multi-Hebras 70 GRACIAS ! Ernesto Cuadros-Vargas Sociedad Peruana de Computación


Descargar ppt "Aplicaciones Multi-Threads-I Ernesto Cuadros -V argas Sociedad Peruana de Computación Perú"

Presentaciones similares


Anuncios Google