1. A method for profiling a multithreaded process comprising the steps of: identifying a process to be profiled, wherein the process is one of a set of processes within instructions of an application; executing the instructions of the application on a processor in a multithreaded manner; interrupting the executing of the instructions of the application on the processor after a first predetermined time period within a time for sampling; determining whether the process within the application was either running or runnable but not running upon interrupting the executing of the instructions of the application, wherein the process that is runnable but not running is a process that is not waiting on I/O and has yet to be executed; responsive to the process within the application running upon interrupting the executing of the instructions of the application after the first predetermined time period, incrementing a value of a first counter for the process; and responsive to the process within the application being runnable but not running upon interrupting the executing of the instructions of the application after the first predetermined time period, incrementing a value of a second counter for the process, wherein the process comprises a plurality of functions and wherein the method further comprises the steps of: assigning a set of separate counters for each function in the plurality of functions; for each function in the plurality of functions of the process: determining whether the function within the process was either running or runnable but not running upon interrupting the executing of the instructions of the application; responsive to the function within the process running upon interrupting the executing of the instructions of the application after the predetermined time period, incrementing a value of a first counter for the function; and responsive to the function within the process being runnable but not running upon interrupting the executing of the instructions of the application after the predetermined time period, incrementing a value of a second counter for the function if the function was runnable but not running.