1. A system for co-locating threads, comprising: two or more processors; a memory storing: a set of instructions which, when executed by one or the two or more processors, cause the processor to co-locate two or more threads on one of the two or more processors based on one or more relationships between the two or more threads; and a collection of thread attribute sets each storing a thread attribute corresponding to one of the two or more threads.