The current scheduler in Haiku was developped by Pawel Dziepak during a paid contract with Haiku. He also wrote several blog posts about it, with many details about the internals:
In short, there isn’t a single universal strategy such as “first come first served”. The decision depends on thread priorities (some priorities are called “real time” in the BeOS API and have different constraints than lower ones). The scheduler also takes care of some power management and decides wether to power on or off CPU cores. It tries to make each thread “stick” to a specific core, because this helps with cache affinity.