From: David Schwartz <davids@webmaster.com>
To: <kernel@tekno-soft.it>
Cc: <linux-kernel@vger.kernel.org>
Subject: Re: Developing multi-threading applications
Date: Thu, 13 Jun 2002 04:58:07 -0700 [thread overview]
Message-ID: <20020613115808.AAA1253@shell.webmaster.com@whenever> (raw)
In-Reply-To: <5.1.1.6.0.20020613122534.02efe850@mail.tekno-soft.it>
>Depending by the applications. With my simulation/emulation program I need
>to create
>many thread because each thread resolve/manage/compute a specific problem
and
>it's live depend by some factors. Each thread is create only if needed to
>avoid the
>overhead. The simulation/emulation is a "merge" of many and many object,
>each object
>work to resolve/manage/compute a specific problem. All the low objects are
>grouped to
>resolve a specific problem and are managed by a thread controller that
>should take some
>decision or doing some work. Some thread controller are grouped and managed
>by another
>thread controller and so on. Do not think that I need always 400 threads
>active they are
>create only if need by the controller. You must thinks this
>simulation/emulation as collection
>of many and many object that should interoperate, and the model is designed
>to scale easily
>on a distribuite environment.
If it's a simulation, you don't *really* need the threads, you just need to
be able to act as if you had them. After all, what are you simulating if what
work gets done when is up to the random vagaries of the OS scheduler?
If it's a real application wanting real performance, the suggestions I made
stand -- you don't want many more threads working than you have CPUs and you
don't want a lot of threads sitting around waiting for work (and thus forcing
bazillions of extra context switches).
It sounds to me like your design is broken, needlessly mapping threads to
I/Os that are being waited for one-to-one. This is a common error among
programmers who consciously or subconsciously have accepted the 'more threads
can do more work' philosophy.
What you need to do is take whatever it is you're thinking of as a 'thread'
right now, which I'd roughly define as 'one logical task, from start to
completion' and realize that there is absolutely no reason to map this
one-to-one to actual pthreads threads and every reason in the world not to.
This will conserve resources (12 thread stacks instead of 300, 12 KSEs
instead of 300), reduce context switches (context switches will only occur
when there's no work to do at all or a thread uses up its entire timeslice
rather than every time we change which client/task we're doing work for/on),
improve scheduler efficiency (because the number of ready threads will not
exceed the number of CPUs by much) and more often than not, clean up a lot of
ugliness in your architecture (because threads are probably being used
instead of a sane abstraction for 'work to be done' or 'a client I'm doing
work for').
DS
next prev parent reply other threads:[~2002-06-13 11:58 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-06-13 8:13 Developing multi-threading applications Roberto Fichera
2002-06-13 8:26 ` David Schwartz
2002-06-13 9:08 ` Roberto Fichera
2002-06-13 9:44 ` Peter Wächtler
2002-06-13 9:52 ` Roberto Fichera
2002-06-13 10:16 ` Peter Wächtler
2002-06-13 10:42 ` Roberto Fichera
2002-06-13 10:13 ` David Schwartz
2002-06-13 11:21 ` Roberto Fichera
2002-06-13 11:58 ` David Schwartz [this message]
2002-06-13 16:26 ` Roberto Fichera
2002-06-14 20:56 ` David Schwartz
2002-06-15 9:01 ` Roberto Fichera
2002-06-15 10:30 ` Ingo Oeser
2002-06-17 8:17 ` Roberto Fichera
2002-06-17 16:07 ` Marco Colombo
2002-06-17 18:00 ` Roberto Fichera
2002-06-17 18:55 ` Jakob Oestergaard
[not found] <20020613113158.I22429@nightmaster.csn.tu-chemnitz.de>
2002-06-13 10:25 ` Roberto Fichera
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20020613115808.AAA1253@shell.webmaster.com@whenever \
--to=davids@webmaster.com \
--cc=kernel@tekno-soft.it \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox