home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / winbase / winnt / mpheap / readme.txt < prev    next >
Text File  |  1996-05-02  |  3KB  |  62 lines

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