signalling remote threads
Julian Elischer
julian at elischer.org
Sat Mar 10 00:53:32 UTC 2007
Julian Elischer wrote:
> Martin Blapp wrote:
>>
>> Hi,
>>
>>> There is no portable way to identify threads in another process.
>>> There is also no guarantee that the tread is even externally visible.
>>> Take
>>
>> But is it true for FreeBSD that 'ps -Hauxwww' should show all threads
>> for a process with libc_r, libpthreads.so, or libthr.so ?
>
> no
>
> libc_r will only have one line in ps even if there are 10,000 threads
> because they are an internal 'figment of the imagination of the process".
> There is NO externally visible sign of them esxcept for the behaviour of
> the process. (it does a lot of async operations).
>
> Similarly for libpthread, it will show SOME threads but not as many as
> there are threads in the process because only threads that are blocked
> for IO in the kernel or are actually running at that instant will
> show up. Threads that are not running or blocked in the kernel
> are, once again just figments of the imagination of the process.
Just to clarify, the threads that will show up in this case are:
(1)threads blocked waiting for something in the kernel (e.g. I/O)
plus
(2)threads ACTUALLY RUNNING ON A CPU
plus
(3)any idle CPU workers for that process (i.e number of cpus - (2))
plus
(4)a worker thread to catch and distribute signals.
Any threads that are runnable but not yet allocated to a CPU worker
or are waiting on some internal event (e.g. a pthread_mutex) will
not show up, as the kernel doesn't know of their existence.
numbers 2 and 3 are actually the same thing.. they are CPU workers
but those in #2 are doing work for an internal thread and those in #3
are waiting to be assigned work (and are thus kind of in the same
category as #1, waiting in the kernel to be woken up by
a signal from within the process, to go get work to do when it
is available.
I don't know if this helps, but...
> If you run a libpthread process with LIBPTHREAD_SCOPE_SYSTEM set to 'yes'.
> then it will switch to 1:1 mode and there will be a kernel thread
> instantiated for each thread in the process and yes you will see them in
> ps -H.
> libthr will always show all the threads because it is basically the
> equivalent and optimised version of libpthread with
> LIBPTHREAD_SCOPE_SYSTEM set. It only runs in that mode.
>
>
>>
>> --
>> Martin
>
> _______________________________________________
> freebsd-threads at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-threads
> To unsubscribe, send any mail to "freebsd-threads-unsubscribe at freebsd.org"
More information about the freebsd-threads
mailing list