The C side of embedding Tcl fits on a postcard. Tcl_CreateInterp, Tcl_EvalObjEx, Tcl_GetObjResult, and everything that crosses is a string. Well, almost.
A Tcl_Obj also caches an internal representation. Use one value as a list here and a number there, and each use throws the other away and reparses the string. That's shimmering. And an interpreter belongs to the thread that created it, so no calling in from a worker pool.
A worker that needs it has to queue an event to the owning thread with Tcl_ThreadQueueEvent, which is more ceremony than I'd like!