Wouldn't it be efficient for the user to be able to assign a certain core to a certain application on modern multicore systems?
First of all, the real answer to your question is, why should you as a user care? OSes are developed to utilize the resources given them in the most efficient way possible. Its unlikely, unless you have specialized requirements, that your machine will perform better doing this job yourself.
Having said that, I think most OSes do give you the option. In Windows you can open the task manager application, select a process and one of the options in the context menu is to "Set Affinity." This will allow you to select which cores the process will run on.
Hard question, it's different in every situation.
The thread/process scheduler in any operating system is way more complicated and efficient than you and it can react to different work-loads very quickly. The user shouldn't be aware of all the mechanics behind "how my process is scheduled", and (my personal note) why does it really matter to you?
You will risk to leave 3 cores sleeping, with the only working core scheduling 2132121 threads in your application..
By the way, if you really want to do it, in any operating system you can define the "cpu affinity" for each process.
In windows you can change which core can a process use in "Task manager", right click on a PROCESS (not on an application) and click "affinity".
EDIT: I used it once, when I had a "very important application": on a overloaded server, THAT application had to run with high-priority, every few minutes (when requested from the customer). We forced the OS to assign two cores (over 8 total cores) exclusively to that application. We got our result, but for the 90% of the time two cores were sleeping.