README.TXT
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. Multithreaded Heap Manager
  2. Summary
  3. -------
  4. The MPHEAP sample is a DLL that provides an implementation of multiple heaps
  5. and serializes access to the heaps.  It will only work on Windows NT 4.0 and
  6. later.
  7. Many multithreaded applications that use the standard memory allocation
  8. routines pay a significant performance penalty when running on a
  9. multiprocessor machine. This is due to the serialization used by the
  10. default heap. On a multiprocessor machine, more than one thread may try to 
  11. allocate memory simultaneously. One thread will block on the critical section
  12. guarding the heap. The other thread must then signal the critical section
  13. when it is finished to release the waiting thread. This adds significant
  14. overhead.
  15. By providing multiple heaps, MPHEAP.DLL allows simultaneous operations on
  16. each heap. A thread on processor 0 can allocate memory from one heap
  17. at the same time that a thread on processor 1 is allocating from a
  18. different heap. The additional overhead in this DLL is offset by
  19. drastically reducing the number of times a thread must wait for heap access.
  20. The TMPHEAP sample is a simple program that demonstrates the functionality of
  21. MPHEAP.DLL.
  22. More Information
  23. ----------------
  24. The basic scheme is to attempt to lock each heap in turn with the
  25. TryEnterCriticalSection function. This will enter the critical section if
  26. it is unowned. If the critical section is owned by a different thread,
  27. TryEnterCriticalSection returns failure instead of blocking until the
  28. other thread leaves the critical section.
  29. Another trick to increase performance is the use of a lookaside list to
  30. satisfy frequent allocations. By using InterlockedExchange to remove
  31. lookaside list entries and InterlockedCompareExchange to add lookaside
  32. list entries, allocations and frees can be completed without needing a
  33. critical section lock.
  34. The final trick is the use of delayed frees. If a chunk of memory is
  35. being freed, and the required lock is already held by a different
  36. thread, the free block is simply added to a delayed free list and the
  37. function completes immediately. The next thread to acquire the heap lock
  38. will free everything on the list.
  39. Every application uses memory allocation routines in different ways.
  40. To allow better tuning, MpHeapGetStatistics allows an application to monitor 
  41. the contention. Increasing the number of heaps increases the potential
  42. concurrency, but also increases memory overhead. Some experimentation
  43. is recommended to determine the optimal settings for a given number of 
  44. processors.
  45. Some applications can benefit from additional techniques. For example,
  46. per-thread lookaside lists for common allocation sizes can be very
  47. effective. No locking is required for a per-thread structure, since no
  48. other thread will ever be accessing it. Because each thread reuses the
  49. same memory, per-thread structures also improve locality of reference.