The most versatile newsreader with respect to threading is tin. It was written by Iain Lea and is loosely modeled on an older newsreader named tass. It does its threading when the user enters the newsgroup, and it is pretty fast at this unless you're doing this via NNTP.
On an 486DX50, it takes roughly 30 seconds to thread 1000 articles when reading directly from disk. Over NNTP to a loaded news server, this would be somewhere above 5 minutes. You may improve this by regularly updating your index file with the -u option, or by invoking tin with the -U option.
Usually, tin dumps its threading databases in the user's home directory below .tin/index. This may however be costly in terms of resources, so that you should want to keep a single copy of them in a central location. This may be achieved by making tin setuid to news, for example, or some entirely unprivileged account. tin will then keep all thread databases below /var/spool/news/.index. For any file access or shell escape, it will reset its effective uid to the real uid of the user who invoked it.
A better solution is to install the tind indexing daemon that runs as a daemon and regularly updates the index files. This daemon is however not included in any release of , so you would have to compile it yourself. If you are running a LAN with a central news server, you may even run tind on the server and have all clients retrieve the index files via NNTP. This, of course, requires an extension to NNTP. Patches for nntpd that implement this extension are included in the tin source.
The version of tin included in some distributions has no NNTP support compiled in, but most do have it now. When invoked as rtin or with the -r option, tin tries to connect to the NNTP server specified in the file /etc/nntpserver or in the NNTPSERVER environment variable. The nntpserver file simply contains the server's name on a single line.
Thu Mar 7 23:22:06 EST 1996