From: Ada BRL <ada.brl.2011@gmail.com>
Subject: Re: "C - like: THIS" pointer to a task type inside a task function
Date: Wed, 25 Jan 2012 04:43:57 -0800 (PST)
Date: 2012-01-25T04:43:57-08:00 [thread overview]
Message-ID: <2c51ce87-87ef-438c-bec5-e3b8114f0471@cf6g2000vbb.googlegroups.com> (raw)
In-Reply-To: reoykk4a3cma.j986gooax0rx$.dlg@40tude.net
On 24 Gen, 18:43, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
wrote:
> On Tue, 24 Jan 2012 09:12:03 -0800 (PST), Ada BRL wrote:
> > On 23 Gen, 19:59, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
> > wrote:
> >> On Mon, 23 Jan 2012 11:32:39 -0800 (PST), Ada BRL wrote:
> >>> I've N clients and one server that communicate each other.
> >>> The N clients retrieve data dynamically, send it to the server throgh
> >>> enrty call (obviously the server can accept just one call per time)
> >>> and wait for the reply from the server (through accept statement).
>
> >> A server cannot wait for itself either "through accept statement" or any
> >> other way.
>
> >> T4.Send_Data (Data);
> >> accept Retrieve_Data (Data);
>
> >> is a patented way to run into a deadlock.
>
> > yes...you are right ... sorry ... =( BUT I MADE A MISTAKE!!!
>
> > There are two tasks for every communication channel:
> > - one performing input, so retrieving data from the net and sending it
> > to the server (call it T1_IN, T2_IN, ...)
> > - one performing output, so retrieving data from the server and
> > sending it on the net (call it T1_OUT, T2_OUT, ...)
>
> OK. When you are working with sockets you normally do not need a dedicated
> output task. The network stack is already buffered and most likely
> asynchronous to the sender once you have initiated send. Thus you could
> consider sending data straight out of the server.
So, please tell me if I'm right, the server has to implement inside
itself the N output socket connections and I just need to have N tasks
implementing a socket connection each useful just for reading data
from the net and forwarding it to the server?
Note also that unless you
> have a relatively small number of sockets to handle (a dozen or so), a task
> per socket doing blocking read would not scale.
Are you referring to the tasks reading from the net?
Tasks are used to read
> sockets simply because it is easier to program this way. If you have 2-3
> sockets, why bother with asynchronous socket I/O?
So I don't have to use tasks neither for reading? Sorry but I haven't
got the concept...
But you won't likely get
> a better performance in terms of data throughout and latencies with
> separate reader/writer tasks. Having one server engaging rendezvous with
> writers that would make this design even less reasonable. That is because
> you have the jobs *serialized* in the server. Writers will be either idle
> most of the time waiting for the server or else block server, which would
> want to make a rendezvous with a *concrete* writer each time. You would
> gain nothing from parallelism here, because serialization of processing is
> enforced by server, it only appears parallel. Unless there is some
> considerable post-processing in the writers, it would rather eat
> performance on meaningless task switching.
The writers just receive data from the server and send it over the
net... now I recognize it's not a well designed software... :-(...
Just to see if I have understood everything:
- NO "writers tasks",
- N "readers tasks": every task has just one connection (socket) to
the peer from which receives data,
- Server is connected (by sockets) to N clients to which sends data
after elaboration,
- Server has one entry like: entry Receive_Data(Id_Reader_task : in
Integer; Data : in String), and inside its infinite loop accept this
entry,
- the generic "reader task" i calls the entry of the server like:
Server.Receive_Data(i, data);
Thank you very much!
You have "opened my eyes"!
>
> --
> Regards,
> Dmitry A. Kazakovhttp://www.dmitry-kazakov.de
next prev parent reply other threads:[~2012-01-25 12:43 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-23 19:32 "C - like: THIS" pointer to a task type inside a task function Ada BRL
2012-01-23 19:59 ` Dmitry A. Kazakov
2012-01-23 22:17 ` tmoran
2012-01-24 8:47 ` Dmitry A. Kazakov
2012-01-24 17:12 ` Ada BRL
2012-01-24 18:43 ` Dmitry A. Kazakov
2012-01-25 12:43 ` Ada BRL [this message]
2012-01-25 13:48 ` Dmitry A. Kazakov
2012-01-25 15:05 ` Ada BRL
2012-01-25 18:10 ` Dmitry A. Kazakov
2012-01-26 15:19 ` Ada BRL
2012-01-26 4:17 ` Randy Brukardt
2012-01-24 17:27 ` Ada BRL
2012-01-23 20:20 ` Jeffrey Carter
2012-01-24 17:13 ` Ada BRL
2012-01-24 6:39 ` J-P. Rosen
2012-01-25 0:42 ` Adam Beneschan
2012-01-25 0:46 ` Adam Beneschan
2012-01-25 7:38 ` J-P. Rosen
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox