It’s a tradeoff of memory vs processing speed. Using normal list operations will copy all elements from one operator to the next, taking a lot of memory, but these operations are relatively fast.
Sequences don’y copy the entire list, but process one item fully through the entire pipeline before pulling the next, which conserves memory. This laziness is achieved with suspend functions and some Coroutines machinery, which adds a certain amount of overhead to each operator. It’s not doing thread-switching because it’s not using Dispatchers, Jobs, etc. from the kotlinx.coroutines library, but it does still have a bit of overhead at the suspension points. So slightly slower processing speed for each individual item when compared to the list operations, but probably not enough a big enough difference to really worry about.
In general, the difference between using list operations and Sequences should not be because of raw performance, but the semantic difference of laziness. There’s no easy way to recommend when to switch from a List to a Sequence because the performance is going to be so specific to your use-case.
As always when it comes to performance, optimize first for maintainability and readability, and only optimize for performance if you notice an actual issue. Do some profiling for yourself to see how the differences actually impact processing speed.