ソース有り難くいただきました。わざわざすんません

とりあえず長いスレを表示中にスクロール用のボタンを押すと、一定時間操作不能になって描画が止まるのをなんとかしたくて、いろいろやってました。
これはThreadViewer-MoveAction#boundingRectForGlyphRangeの
return [lmanager_ boundingRectForGlyphRange : glyphRange
inTextContainer : container_];
に時間がかかってるためのようです。おそらくTextStorageにテキスト追加中はText関連はみんなlockされていて、その間にTextLayoutManagerにアクセスして待ちが発生してしまうものと思われます。
さらにこれはmain threadの処理なので、描画もストップするようです。

これをある程度解決するにはTHREAD_DATA_CONTENT_GENERATE_UNITを1とかにするのが手っ取り早いと思われます。50のときと時間を比べてみましたがそんなに違いはないと思います。
むしろ[[self threadContent] endEditing]で頻繁にunlockが行われることによりユーザーの操作に反応できるようになるメリットが大きいと思います。

で、これでいいと思ったんですが、よく止まるようになってしまいました。だめだ、、、。

既出の問題ですが、デッドロックになってます。
Thread1(main loop): [NSRecursiveLock lock]
Thread2: [NSViewHierarchyLock lock]
とかになって止まります。
Thread2はThreadViewer-MoveAction#glyphRangeForDocumentVisibleRectの
glyphRange_ =
[lmanager_ glyphRangeForBoundingRect : visibleRect_
inTextContainer : container_];
とかで止まってます。lockFocusIfCanDrawとかを入れてみたんですが、それでも止まります。
NSViewHierarchyLockはviewのlockってことがわかるんですが、Thread1のNSRecursiveLockがなんだかわかりません。text関連のlockだということは分かるんですが。

というわけでぜんぜん役に立ってないですな。スマソ