A Squeak thread is implemented with class Process. This page uses the word "thread" in order to remain accessible to new Squeak users.
The Squeak scheduler is cooperative between threads of the same priority, and preemptive between threads of different priorities. A thread can be interrupted by threads of a higher priority, but it will (sort of) never be interrupted by a thread of the same priority, and it will never be interrupted by a thread of a lower priority. The "sort of" is because whenever a thread is interrupted by a higher-priority thread, it moves to the back of its run queue. See True Cooperative Threads?.
Alternative thread schedulers can be implemented within Squeak, by having a high priority thread act as a schedular. The general strategy is for a high priority thread to periodically come to life and either juggle the run queues or juggle thread priorities. See Alternative Thread Schedulers.
Squeak threads are implemented on top of a single OS thread. This is sometimes called a "green threads" architecture. The main disadvantage to this approach is that it is impossible to use multiple CPUs even when the machine has them available. This leads some to call for Using Multiple OS Threads. Using multiple OS threads has its own problems, however. A major implementation challenge is Multi-threaded Garbage Collection, and additionally there are general application-level challenges caused by Preemptive Threads with Shared Memory.
Regarding performance, green threads perform faster than OS threads due to avoiding context switches. For multiple CPUs the picture is less clear.