comp.lang.ada
 help / color / mirror / Atom feed
From: Ole-Hjalmar Kristensen <ole-hjalmar.kristensen@substitute_employer_here.com>
Subject: Re: State Threads
Date: 07 Sep 2004 12:08:57 +0200
Date: 2004-09-07T10:08:59+00:00	[thread overview]
Message-ID: <wvbry8jmjsqu.fsf@sun.com> (raw)
In-Reply-To: 5ad0dd8a.0409061024.7c8831fd@posting.google.com

>>>>> "WN" == Wojtek Narczynski <wojtek@power.com.pl> writes:

    WN> Hello,
    >> I've seen plenty of information and indication that C does not 
    >> outperform Ada significantly or at all.

    WN> You merely scratch the subject. How exactly would you structure an Ada
    WN> application to handle 100K socket connections?

One (very old) way of doing this is the way it has tradionally been
done in TP monitors. You have a pool of servers for each server class.
In case you only want to have a web server, you just need one pool.
The number of servers (threads) are dependent on you number of CPU's.
Typically you want some more threads than CPU's to account for threads
that may be blocking on IO. If you want to be fancy (TP systems are),
you can include a load balancer which creates new server threads in
case some of you CPU's are idle although there are unprocessed
messages, otherwise just have a reasonable number of threads in
reserve. All threads are identical, and execute in an endless loop,
consuming messages from the network. When the message is read, the
thread restores the execution context, in a TP system it would be the
transaction state, in a web server it would be the session state.  It
then dispatches on the message type, and executes in the restored
context. When it is finished, it sends the result. This model has no
problems with blocking on disk IO, because if a thread needs to block,
it blocks, and some other thread gets to execute. As long as there are
enough threads, no CPU will be idle. Since we dimension the number of
threads after the number of CPU's not after the number of connections,
there should be no thrashing. Now, this model is probably closer to an
event driven model than you like, but you do not need to register any
callbacks. The two critical points with this scheme are fast retrieval
of messages from the network and fast restoration of the execution
context. On a Unix system the select or poll system calls would be the
natural choiche to handle your sockets, although I wonder how it would
scale to 100K connections. The execution context takes the place of
the stack in state-threads, whether one is better than the other
depends on the application, I would think. Also observe that the
state-threads library has no explicit support for multiple CPU's.

You might argue that in a typical web server, each new request will
result in blocking disk IO, thus leading to an ever increasing number
of threads. But the answer is, just don't increase the number of
threads. If the disk is the bottleneck, increasing the number of
active requests will not give you any better throughput as long as you
have a reasonable number of active entries in the disk queue at any
time.

    >>> Also disappointing is the NIH syndrome that prevails the Ada world.

    >> No. We may be keen on 100% Ada, 0% bugs, but will use a good binding 
    >> happily. GtkAda, Pgsql...

    WN> Mercy. Without non-Ada code you could not even boot your computer, so
    WN> you are forced to use non-Ada code, it's not your choice.

    WN> Besides, this NIH syndrome is about reusing concepts, not about
    WN> reusing code.

    WN> Regards,
    WN> Wojtek

-- 
   C++: The power, elegance and simplicity of a hand grenade.



  parent reply	other threads:[~2004-09-07 10:08 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-23 18:27 Feasibility of using Ada in new development Robert Law
2004-08-23 19:05 ` Martin Dowie
2004-08-23 19:09 ` Jeffrey Carter
2004-08-24  0:06 ` Florian Weimer
2004-08-24  1:31 ` Stephen Leake
2004-08-24  3:59 ` Adrian Hoe
2004-08-24  4:13 ` Steve
2004-08-24 11:09   ` Phong Ho
2004-08-24 11:40     ` Jeff C,
2004-08-24 20:25       ` Robert Law
2004-08-25 21:05         ` Dan McLeran
2004-08-26  2:42           ` John B. Matthews
2004-08-26 11:49           ` Georg Bauhaus
2004-08-26 19:31             ` Dan McLeran
2004-08-26 20:04               ` Simon Wright
2004-08-27 12:47               ` Georg Bauhaus
2004-08-27 21:08                 ` Dan McLeran
2004-08-28  0:28                   ` Stephen Leake
2004-09-01  4:09                     ` Adrian Hoe
2004-09-01  4:07                   ` Adrian Hoe
2004-09-01 14:14                     ` Hyman Rosen
2004-09-01 15:30                       ` Ed Falis
2004-09-05 20:50                         ` Florian Weimer
2004-09-05 21:27                           ` Ed Falis
2004-08-26 18:15           ` Ludovic Brenta
2004-08-28 17:57             ` Dan McLeran
2004-08-28 18:37               ` Ludovic Brenta
2004-08-30 17:06                 ` Dan McLeran
2004-08-30 18:00                   ` Georg Bauhaus
2004-08-30 18:55                   ` Jeffrey Carter
2004-08-31 17:11                     ` Dan McLeran
2004-08-31 17:46                       ` stephane richard
2004-08-31 19:19                         ` Björn Persson
2004-09-01 12:32                           ` Georg Bauhaus
2004-09-01 14:35                             ` Björn Persson
2004-09-02 15:18                         ` Dan McLeran
2004-09-02 22:03                           ` Randy Brukardt
2004-09-03 14:56                             ` Dan McLeran
2004-09-03 18:09                               ` Jeffrey Carter
2004-09-03 23:42                               ` Randy Brukardt
2004-09-04 15:06                                 ` Stephen Leake
2004-09-04 18:31                                   ` Georg Bauhaus
2004-09-05  8:18                                   ` Pascal Obry
2004-09-07  8:32                                   ` Jacob Sparre Andersen
2004-09-07  8:57                                     ` Georg Bauhaus
2004-09-08 12:26                                       ` Stephen Leake
2004-09-08 13:07                                         ` Georg Bauhaus
2004-08-31 18:12                       ` Jeffrey Carter
2004-08-31 18:14                         ` stephane richard
2004-08-31 20:09                           ` Hyman Rosen
2004-09-02  8:56                             ` Martin Dowie
2004-09-02 16:23                               ` Martin Krischik
2004-09-03  8:30                                 ` Martin Dowie
2004-09-03 18:04                                   ` Jeffrey Carter
2004-09-02 15:11                             ` Dan McLeran
2004-09-02 16:17                               ` Code completion Björn Persson
2004-09-02 17:42                                 ` Georg Bauhaus
2004-09-02 19:29                               ` Feasibility of using Ada in new development Simon Wright
2004-09-03 14:57                                 ` Dan McLeran
2004-08-26  9:52         ` Pascal Obry
2004-09-03  7:14         ` Case Crab
2004-09-03 12:21           ` Georg Bauhaus
2004-08-25  1:08     ` Puckdropper
2004-08-25  6:02       ` Adrian Hoe
2004-08-25  8:12         ` Martin Dowie
2004-08-25 12:54         ` Florian Weimer
2004-08-24 23:01 ` Luke A. Guest
2004-08-26 17:17   ` Warren W. Gay VE3WWG
2004-08-31  6:22 ` Wojtek Narczynski
2004-09-01  4:04   ` Adrian Hoe
2004-09-04 15:38     ` Wojtek Narczynski
2004-09-05  8:27       ` Pascal Obry
2004-09-05 11:54         ` Marius Amado Alves
2004-09-05 12:18           ` State Threads (was: Feasibility of using Ada in new development) Björn Persson
2004-09-05 13:13             ` State Threads Marius Amado Alves
2004-09-06 13:15               ` Wojtek Narczynski
2004-09-06 14:28                 ` Marius Amado Alves
2004-09-06 18:24                   ` Wojtek Narczynski
2004-09-07  0:23                     ` Marius Amado Alves
2004-09-07  8:13                       ` Wojtek Narczynski
2004-09-07 10:03                         ` Marius Amado Alves
2004-09-07 10:08                     ` Ole-Hjalmar Kristensen [this message]
2004-09-07 15:20                       ` Wojtek Narczynski
2004-09-06 16:23                 ` Georg Bauhaus
2004-09-07  8:01                   ` Wojtek Narczynski
2004-09-07  9:16                     ` Georg Bauhaus
2004-09-08 12:38                       ` Wojtek Narczynski
2004-09-08 13:26                         ` Georg Bauhaus
2004-09-06 12:19           ` Feasibility of using Ada in new development Wojtek Narczynski
2004-09-06 17:56         ` Wojtek Narczynski
2004-09-06 20:52           ` Pascal Obry
2004-09-07  8:40             ` Wojtek Narczynski
2004-09-07 23:59           ` Randy Brukardt
2004-09-08  9:10             ` Wojtek Narczynski
2004-09-09  1:12               ` Randy Brukardt
2004-09-09 10:26                 ` Wojtek Narczynski
2004-09-09 21:46                   ` Randy Brukardt
2004-09-06  3:11       ` Adrian Hoe
2004-09-06  8:17         ` Mark Lorenzen
2004-09-06 12:31         ` Wojtek Narczynski
2004-09-06  7:36       ` Ole-Hjalmar Kristensen
2004-09-06 15:32         ` Wojtek Narczynski
2004-09-07 23:51       ` Randy Brukardt
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox