KLayout can run DRC in three different modes: flat, deep and tiled.
Tiled is inherently multithreaded, and I believe deep is multithreaded in some parts.
However, not all modes work equally. While deep is mostly compatible with flat, tiled mode needs careful considerations in the DRC rules.
Why can't separate DRC operations be multithreaded?
KLayout executes the DRC deck interactively, meaning one operation runs after another. This allows easy branching on calculated results, however, it does not allow operations to be parallelized, since dependencies are unknown.
KLayout would need a flow graph based model to do that.
A quick and dirty way to add parallelization would be to manually split the rule deck and start n processes of KLayout.
This is what the run_drc.py script does, and I can integrate it into LibreLane for the second run.
However, this also means n times the memory consumption.
I think most of these issues also apply to magic. There the default DRC mode is also a kind of deep mode based on cells. As far as I know, there is no parallelization available.
1